2016-05-20 47 views
10

Pracuję nad aplikacją, w której ustalam orientację (jeśli jest obecna) plików jpeg pobranych z zasobnika AWS.PHP exif_read_data Nielegalny rozmiar IFD

Here Możesz sprawdzić, czy ten obraz ma sekcję Rotacja exif.

pobrać obraz z

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

A po próbuję naprawić orientacji przez Gregwar Image library.

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

Próbowałem z kilku obrazów i zawsze pojawia się komunikat

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

Myślałem, że to problem związany z tym, jak odzyskać obrazy, ale próbowałem też z dyni i fopen z tym samym wynik.

Ktoś ma kilka porad?

Odpowiedz

0

Można użyć „@” przed ignorować ostrzeżenia: @Image::open($path)->fixOrientation()->save($dest, $type, $quality);

Jest wiele osób narzeka na ten temat w internecie. Prawdopodobnie niektóre dane exif z błędem. Jeśli operacja działa tak, jak chcesz, po prostu ją udokumentuj i przejdź dalej.

+4

Witam, dziękuję za poradę, ale moim problemem nie jest ostrzeżenie (że okładka biblioteki), ale dlaczego nie jestem w stanie sprawdzić danych exif. W tej chwili nie jestem w stanie ustalić orientacji żadnego obrazu i to jest frustrujące. – stuzzo

+0

Spróbuj tego: '-> useFallback (false)': https://github.com/Gregwar/Image/issues/96 –

+0

@stuzzo: znalazłeś jakieś obejście? – auco

0

Napotkano ten problem również przy użyciu pliku exif_get_data. Mogę obsługiwać obrazy na moim localhost (PHP v5.4.15), ale na moim hostingowym (PHP v5.6.22) błąd "nielegalny rozmiar IFD" mimo, że próbowałem "@" ignorować metodę ostrzegania. Znalazłem to na hoście internetowym (z powodu innej wersji lub instalacji), exif_get_data faktycznie rzucił wyjątek, zamiast wydawania ostrzeżenia. Używam danych EXIF ​​przeorientować obraz jeśli został obrócony, więc jeśli dane exif jest uszkodzony lub nie występuje po prostu zignorować i nic nie robić, oto fragment kodu:

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

Standardowa funkcja PHP nie generuje wyjątków. –

2

PHP 5.6.2x ma błąd z jego funkcją EXIF ​​(patrz błąd #72914, a także #72819 w celu uzyskania dalszych informacji). Próba odczytania danych EXIF ​​spowoduje wystąpienie jednego z opisanych błędów (nieprawidłowy rozmiar IFD, nieprawidłowe dane IFD, inne).

Obecnie (2016-11-21) nie ma rozwiązania dla oddziału 5.6. W dziale 7 trwają testy.

Wprowadź lokalną poprawkę, testując funkcję wyrzucania błędów IFD, a po potwierdzeniu przyjmij, że EXIF ​​jest niedostępny przez czas trwania skryptu.

(Można załatać że do ładowarki, jeśli chcesz, i „przeciążenie” funkcji, aby wrócić domyślna false/0/null zamiast wskazać szkody)

+2

Otrzymuję to również w wersji 7.0.21. – burzum

-1

można złapać błąd z set_error_handler

set_error_handler(function() { 
    throw new Exception(); 
}, E_WARNING); 

    try{ 
    $exifData = exif_read_data($filePath); 
    } catch (Exception $e) { 
    $exifData = false; 
    } finally { 
    restore_error_handler(); 
    } 

    if(!$exifData) { 
    // do something 
    }