Sonntag, Juni 7, 2020

PHP – „FPDF error: not a PNG file“, aber das Bild ist

Ich bin derzeit läuft in eine sehr seltsame Problem mit fpdf. Ich stellte eine ähnliche Frage ohne Antwort: nicht eine PNG-Datei in FPDF. Ich habe ein Bild hochgeladen über einen browser auf meinem file-server, und zog dann in ein fpdf-Bericht. Wenn dieses Bild ist ein png, ich bekomme die Fehlermeldung: „FPDF error: not a PNG file“. Ich bekomme keine Fehler wenn das hochgeladene Bild ist ein jpg. Dieses Problem scheinbar über Nacht erschien vor ein paar Wochen.

Sogar fremden, es ist nur passiert mit den neuen png hochgeladen werden. Es war eine png in einem Bericht, wurde die Erzeugung in Ordnung. Wenn ich heruntergeladen habe die png aus dem system und neu hochgeladen, der Fehler erschien wieder.

Hier sind einige der Schritte, die ich gemacht habe beim Versuch das Problem zu beheben:

  1. Ich habe dafür gesorgt, das Bild ist eigentlich ein png (über die Eigenschaften).
  2. Nichts geändert hat mit der Art und Weise habe ich seit dem speichern der Bilder, aber hier ist der code:

    $original = $time."_".$name."_o.".$extension;
    $thumbnail = $time."_".$name."_t.".$extension;  
    include('SimpleImage.php');
    $image = new SimpleImage();
    $image->load($_FILES['file']['tmp_name']);
    $image->save($A_path."images/".$original);
    $image->resizeToHeight(200);
    $image->save($A_path."images/thumbs/".$thumbnail);
    $photo = "images/".$original;
    $thumb = "images/thumbs/".$thumbnail;
  3. Ich habe überprüft, um zu sehen, ob Ihre waren änderungen im PNG-format oder FPDF-updates, mit kein Glück.
  4. Ich habe Umgerechnet ein jpg, das funktioniert in png durch gimp.
  5. Umwandlung von png zu jpg durch gimp und dann das hochladen der jpg um das system erzeugt keine Fehler.

WORKAROUND – ich bin Voraus gegangen, und konvertiert png ’s in jpg‘ s auf speichern, eher als eine re-Codierung des Bildes. Vielen Dank für die Hilfe.

  • Öffnen Sie das Bild mit Editor oder notepad++, wenn die ersten paar chars nicht enthalten, ‚PNG‘ es ist nicht eine png-Datei
  • Zum Glück (oder leider?), PNG scheint in den ersten paar chars.
  • Nun, das ist irgendwie standard für png-Dateien, so dass Sie jetzt wissen, es ist nicht nicht ein png
  • PNG scheint in den ersten paar chars.
  • Was bedeutet „pngcheck -v-Datei.png“ sagen? Wenn Sie nicht über pngcheck, was ist mit „identify-verbose Datei.png“ sagen? Die Fehlermeldung zeigt an, dass es etwas falsch mit den ersten 8 bytes der Datei.
  • Dieses kleine Programm sagt Ihnen, die details zu einem PNG-Bild (und auf Fehler geprüft) entropymine.com/jason/tweakpng

InformationsquelleAutor Jesse Cover | 2015-10-02

3 Kommentare

  1. 2

    Fixed it, indem Sie das Bildformat manuell auf JPG und dann den Vorgang wiederholen.

    • Ich habe es behoben, indem Sie speichern Sie es als jpg, als gut, konnte es nicht zu Lesen, png überhaupt.
  2. 1

    Die Fehlermeldung zeigt an, dass es etwas falsch mit den ersten acht bytes der Datei („png-Signatur“).

    Verwenden „od -c | head -1“ zu inspizieren, um die ersten 16 bytes. Jede PNG-Datei
    beginnt mit diese:

    211   P   N   G  \r  \n 032  \n  \0  \0  \0  \r   I   H   D   R

    Wenn Sie es vorziehen, verwenden Sie „xxd-Datei.png | head -1“ und erwarten, dass dies zu sehen:

    0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR

    Diese 16 Byte werden die PNG-Unterschrift und die Länge und den Namen der ersten chunk. Die ersten 8 bytes sind die format –
    name, plus Zeilenumbrüche (Zeilenvorschübe) und carriage returns sind so konzipiert, dass
    um zu erkennen, verschiedene übertragungsfehler. Die nächsten 8 bytes sind der Anfang
    der IHDR-chunk, der muss Länge=13, ausgedrückt als ein 4-byte-integer-Zahl, und der name=“IHDR“.

    Sehen die PNG-Spezifikation für details.

    • Nach der hex dumm, ich bekommen: 89 50 4e 47-0d 0a 1a 0a-00 00 00 0d-49 48 44 52 .PNG.... ....IHDR, das scheint die gleichen Kopf-du gepostet hast. Mehr Gedanken?
    • Das bedeutet, dass die Datei, die Sie hex-gedumpten ist in der Tat ein PNG. Etwas schief geht, später, vielleicht in der Upload-Prozess. Können Sie uns sagen, wie genau Sie die, die Sie hochgeladen haben? „ftp“ überträgt, zum Beispiel, kann Chaos mit dem CR (0d) und LF (0a) bytes, wenn Sie die falschen ftp-Modus.
  3. 0

    Überprüfen Sie die Tiefe des Bildes. FPDF unterstützt 24bit Tiefe (ich bin mir nicht sicher über 32bit Farbtiefe), weder unterstützt alpha-Kanal.
    Ich würde versuchen, neu codieren zu png mit ImageMagick (oder paint.net unter windows).

    convert input.png -depth 8 +matte output.png

Kostenlose Online-Tests