it-swarm.com.de

PHP exif_read_data Unzulässige IFD-Größe

Ich arbeite an einer Anwendung, in der ich die Ausrichtung von JPEG-Dateien, die von einem AWS-Bucket heruntergeladen wurden, korrigiere (falls vorhanden).

Hier können Sie überprüfen, ob dieses Bild eine Exif-Rotation-Sektion hat.

Ich lade das Bild mit herunter

file_put_contents('/local/path/to/file', file_get_contents('/path/to/url/image'));

Und nachdem ich versuche, die Orientierung durch die Gregwar Image Library zu korrigieren.

Image::open($path)->fixOrientation()->save($dest, $type, $quality);

Ich habe es mit mehreren Bildern versucht und erhalte immer die Nachricht

Warning: exif_read_data('/local/path/to/file'): Illegal IFD size

Ich dachte, dass dies ein Problem war, das mit dem Abrufen der Bilder zusammenhängt, aber ich habe es auch mit cUrl und fopen mit demselben Ergebnis versucht.

Jemand hat einige Ratschläge?

13
stuzzo

PHP 5.6.2x hat einen Fehler mit seiner EXIF-Fähigkeit (siehe Bug # 72914 sowie # 72819 für weitere Informationen). Wenn Sie versuchen, EXIF-Daten zu lesen, führt dies zu einem der beschriebenen Fehler (unzulässige IFD-Größe, falsche IFD-Daten, andere).

Derzeit (2016-11-21) ist für die 5.6-Filiale kein Fix verfügbar. In Zweig 7 werden einige Tests durchgeführt.

Implementieren Sie einen lokalen Fix, indem Sie die Funktion testen, die IFD-Fehler auslöst. Wenn Sie dies bestätigen, wird davon ausgegangen, dass EXIF ​​für die Dauer des Skripts nicht verfügbar ist.

(Sie können dies in den Loader laden, wenn Sie möchten, und die Funktionen "überladen", um den Standardwert false/0/null zurückzugeben, um einen Bruch anzuzeigen.)

4
Kadigan.KSB

Sie können zuvor ein "@" verwenden, um Warnungen zu ignorieren: @Image::open($path)->fixOrientation()->save($dest, $type, $quality);

Das ist eine Menge Leute, die sich über das Internet beschweren. Vermutlich einige Exif-Daten mit Fehler. Wenn Ihre Operation so funktioniert, wie Sie möchten, dokumentieren Sie sie einfach und machen Sie weiter.

1
Felippe Duarte

Dieses Problem ist auch bei der Verwendung von exif_get_data aufgetreten. Ich kann Bilder auf meinem localhost (PHP v5.4.15) verarbeiten, aber auf meinem Webhost (PHP v5.6.22) wurde der Fehler 'illegale IFD-Größe' angezeigt, obwohl ich die Warnmethode "@" ignoriert habe dass auf dem Webhost (ob aufgrund einer anderen Version oder Installation) exif_get_data tatsächlich eine Ausnahme ausgelöst hat, anstatt eine Warnung auszugeben. Ich verwende die Exif-Daten, um das Bild neu auszurichten, wenn es gedreht wurde. Wenn die Exif-Daten fehlerhaft oder nicht vorhanden sind, ignoriere ich es einfach und tue nichts, hier ist der Code-Ausschnitt:

     try {
        $exif = exif_read_data($filePath);
     }
     catch (Exception $exp) {
        $exif = false;
     }
     if ($exif){
        ...
     }
1
Arfon

In Produktionsumgebung ist es am besten, Warnungen zu verbergen!

Also habe ich die Fehlermeldung an ERRORS nur mit der folgenden Zeile zu Beginn meines Skripts geändert:

error_reporting(E_ERROR);
0
Meloman