[ABAP] Bilddatei konvertieren mit Hilfe der Klasse cl_igs_image_converter (Internet Graphics Service: Image Converter)

* Demo: GRAPHICS_IGS_IMGCONV_DEMO

* Dateiname der Bilddatei zum hochladen
PARAMETERS: p_fname TYPE file_table-filename OBLIGATORY.

* wenn die F4-Hilfe für den Dateinamen aufgerufen wird
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.

  DATA: lv_rc TYPE i.
  DATA: it_files TYPE filetable.
  DATA: lv_action TYPE i.

* File-Tabelle leeren, da hier noch alte Einträge von vorherigen Aufrufen drin stehen können
  CLEAR: it_files.

* FileOpen-Dialog aufrufen
  TRY.
      cl_gui_frontend_services=>file_open_dialog( EXPORTING
                                                    file_filter = |gif (*.gif)\|*.gif\|{ cl_gui_frontend_services=>filetype_all }|
                                                  CHANGING
                                                    file_table  = it_files
                                                    rc          = lv_rc
                                                    user_action = lv_action ).

      IF lv_action = cl_gui_frontend_services=>action_ok.
* wenn Datei ausgewählt wurde
        IF lines( it_files ) > 0.
* ersten Tabelleneintrag lesen
          p_fname = it_files[ 1 ]-filename.
        ENDIF.
      ENDIF.

    CATCH cx_root INTO DATA(e_text).
      MESSAGE e_text->get_text( ) TYPE 'S' DISPLAY LIKE 'E'.
  ENDTRY.

START-OF-SELECTION.

  TRY.
      DATA: lv_filesize TYPE w3param-cont_len.
      DATA: lv_filetype TYPE w3param-cont_type.
      DATA: it_bin_data TYPE w3mimetabtype.

* Bild auf Appl. Server hochladen (binary)
      cl_gui_frontend_services=>gui_upload( EXPORTING
                                              filename   = |{ p_fname }|
                                              filetype   = 'BIN'
                                            IMPORTING
                                              filelength = lv_filesize
                                            CHANGING
                                              data_tab   = it_bin_data ).

* Konverterobjekt erzeugen
      DATA(o_conv) = NEW cl_igs_image_converter( ).

* MIME-Typen (Format) für input und output festlegen
      o_conv->input  = 'image/gif'.      " Quellformat ist ein GIF
      o_conv->output = 'image/x-ms-bmp'. " Ausgabeformat ist ein BMP

* neue Bildgröße festlegen
*  o_conv->height = '100'. " neue Höhe 100
*  o_conv->width = '100'.  " neue Breite 100

* Bildaten übergeben
      o_conv->set_image( blob      = it_bin_data
                         blob_size = lv_filesize ).

* Image konvertieren
      o_conv->execute( ).

* Anzahl Ergebnisbilder > 0
      IF o_conv->get_image_count( ) > 0.
* Bilddaten im Ausgabeformat holen
        o_conv->get_image( IMPORTING
                             blob      = it_bin_data
                             blob_size = lv_filesize
                             blob_type = lv_filetype ).

* Image lokal speichern
        cl_gui_frontend_services=>gui_download( EXPORTING
                                                  filename     = 'c:\temp\temp.bmp'
                                                  filetype     = 'BIN'
                                                  bin_filesize = lv_filesize
                                                CHANGING
                                                  data_tab     = it_bin_data ).
      ENDIF.
    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.