mika: Fehler bei imagecreatefromgif

Hallo Zusammen,

beim Aufruf der PHP-Funktion "imagecreatefromgif" bekomme ich folgende Fehlermeldung:

Warning: imagecreatefromgif() [function.imagecreatefromgif]: XXX/XXX/xxx.gif' is not a valid GIF file in C:\Programme\xampp\htdocs\download\pdf.php on line 74

Der Hintergrund ist Folgender:
Ich möchte ein bestimmtes HTML-Dokument per PHP als PDF-File aufbereiten.
Dazu verwende ich die Open Source - Klasse FPDF.

In diesem HTML-Dokument sind mehrere Gif-Bilder.

Da die Klasse FPDF mit dem Gif-Format nicht zurecht kommt, wandle ich die Bilder per PHP in JPEG-Bilder um.

Das ganze funktionierte mit einem Test-HTML-Dokument in das ich selbst gespeicherte Gif-Bilder untergebracht habe auch wunderbar.

Im Livebetrieb sieht es wiederum so aus, dass die Gif-Bilder, die in dem richtigen HTML-Dokument enthalten sind, selbst von einem anderen Skript dynamisch erstellt werden.

Und diese Bilder scheinen ein anderes Gif-Format zu haben als herkömmliche Gif-Bilder, die z.B. mit einem Grafikprogramm erstell/bearbeitet und dann abgespeichert wurden.

Gibt es in PHP eine Möglichkeit, damit die Funktion imagecreatefromgif (oder eine andere Funktion) mit diesem Bildformat klar kommt???

Hier noch der Quelltext-Auszug

//Bilder in JPG-Format umwandeln
function convertImages() {
  if($this->errorno == 0) {
    $a = 0;
    for($i=0; $i<$this->imagenumber; $i++) {
      $name = $this->location.$this->imagenames[$i];
      $prefix = substr($name, 0, (strlen($name)-3));
      $suffix = substr($name, -3);
      if($suffix != 'jpg') {
        $function = 'imagecreatefrom'.$suffix;
 $picture = $function($name);
 if(imagejpeg($picture, $prefix.'jpg')) {
   unlink($name);
     $this->imagenames[$i] = $prefix.'jpg';
     $a++;
        }
        imagedestroy($picture);
      }
    }
   return $msg = "<br /><br /><span>Es wurden $a Bilder erfolgreich in das JPEG-Format umgewandelt</span>";
}

Gruß
Mika

  1. (Hallo|Hi(ho)|Tag|Mahlzeit) mika,

    beim Aufruf der PHP-Funktion "imagecreatefromgif" bekomme ich folgende Fehlermeldung:

    Warning: imagecreatefromgif() [function.imagecreatefromgif]: XXX/XXX/xxx.gif' is not a valid GIF file in C:\Programme\xampp\htdocs\download\pdf.php on line 74

    Dann ist diese Datei mit allerhöchster Wahrscheinlichkeit keine GIF-Datei. Du kannst relativ einfach feststellen, ob das der Fall ist: Die ersten 4 Bytes müssen (in ASCII) den String 'GIF8' enthalten. In einem Hex-Viewer sind das die Werte "47 49 46 38". Die Funktion GetImageSize() liefert dir das wirklich verwendete Dateiformat.

    Der Hintergrund ist Folgender:
    Ich möchte ein bestimmtes HTML-Dokument per PHP als PDF-File aufbereiten.
    Dazu verwende ich die Open Source - Klasse FPDF.

    In diesem HTML-Dokument sind mehrere Gif-Bilder.

    Da die Klasse FPDF mit dem Gif-Format nicht zurecht kommt, wandle ich die Bilder per PHP in JPEG-Bilder um.

    Das ganze funktionierte mit einem Test-HTML-Dokument in das ich selbst gespeicherte Gif-Bilder untergebracht habe auch wunderbar.

    Im Livebetrieb sieht es wiederum so aus, dass die Gif-Bilder, die in dem richtigen HTML-Dokument enthalten sind, selbst von einem anderen Skript dynamisch erstellt werden.

    Eine (etwas naive) Zwischenfrage: Hast du geprüft, ob die Datei, die dein Script laden möchte, auch existiert? Dein Quellcode sagt: Nein.

    Es besteht auch die Möglichkeit, dass die Dateiendung nicht ".gif" ist. Lass dir mal zur Kontrolle $function ausgeben. Auch sollte Rückgabewert von function_exists($function) TRUE sein, bevor du $function als Funktion benutzt. Dein Script ...

    if($suffix != 'jpg') {
            $function = 'imagecreatefrom'.$suffix;
    $picture = $function($name);

    ... dürfte nämlich auf die Nase fallen, wenn $suffix irgendwas anderes enthält als "jpeg", "gif", "png" oder "wbmp". Es ist sicherer, den Dateityp mit getImageSize() zu ermitteln.

    Und diese Bilder scheinen ein anderes Gif-Format zu haben als herkömmliche Gif-Bilder, die z.B. mit einem Grafikprogramm erstell/bearbeitet und dann abgespeichert wurden.

    Meines Wissens gibt es nur zwei GIF-Formate: 87a und 89a. Mit beiden kann imageCreateFromGIF() im Rahmen seiner Möglichkeiten umgehen.

    Gibt es in PHP eine Möglichkeit, damit die Funktion imagecreatefromgif (oder eine andere Funktion) mit diesem Bildformat klar kommt???

    Du kannst dir u.A. von der FPDF-Projekt-Site ein Script downloaden, das GIF-Dateien nach JPEG, PNG und BMP konvertiert und das komplett in PHP geschrieben ist. Das liefert dir möglicherweise aufschlussreichere Fehlermeldungen als imageCreateFromGIF() ...

    MffG
    EisFuX

    1. Hallo EisFux

      Dann ist diese Datei mit allerhöchster Wahrscheinlichkeit keine GIF-Datei. Du kannst relativ einfach feststellen, ob das der Fall ist: Die ersten 4 Bytes müssen (in ASCII) den String 'GIF8' enthalten. In einem Hex-Viewer sind das die Werte "47 49 46 38".

      Ich habe das Gif-File mal mit Notepad geöffnet und das sind die ersten 5Bytes: GIF89a

      Eine (etwas naive) Zwischenfrage: Hast du geprüft, ob die Datei, die dein Script laden möchte, auch existiert? Dein Quellcode sagt: Nein.

      Ja das habe ich geprüft, die Datei existiert

      Es besteht auch die Möglichkeit, dass die Dateiendung nicht ".gif" ist. Lass dir mal zur Kontrolle $function ausgeben. Auch sollte Rückgabewert von function_exists($function) TRUE sein, bevor du $function als Funktion benutzt.

      Es handelt sich definiv um ein Gif-File, zumindest laut der Endung, aber
      um mein Code zu optimieren werde ich die von dir vorgeschagene Funktion verwenden um den Dateityp/Dateiendung zu ermittenl. Danke.

      Meines Wissens gibt es nur zwei GIF-Formate: 87a und 89a. Mit beiden kann imageCreateFromGIF() im Rahmen seiner Möglichkeiten umgehen.

      Laut Notepad handelt es sich um 89a

      Gruß
      Mika

      1. Hallo Zusammen,

        das Problem hat sich erledigt.

        Ich habe vor lauter Bäumen den Wald nicht mehr gesehen...

        Ich habe immer das falsche Gif-Bild im Notepade unter die Lupe genommen.

        Bei den vermeintlichen Gif-Bildern handelt es sich um PNG Bilder.

        Tut mir leid für den unnötigen Aufwand, aber immerhin habe ich und vielleicht auch andere gelernt, dass es GIF87a und GIF89a gibt.

        Danke und Gruß
        Mika