2016-05-20 6 views
10

Я работаю над приложением, в котором я исправляю ориентацию (если она присутствует) файлов jpeg, загружаемых из ведра AWS.PHP exif_read_data Недопустимый размер IFD

Here вы можете проверить, что это изображение имеет секцию поворота exif.

загрузить изображение с

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

И после того, как я пытаюсь исправить ориентацию через Gregwar Image library.

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

Я попытался с несколькими изображениями, и я всегда получаю сообщение

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

я думал, что это было проблемой, связанной с тем, как я получить изображения, но я попытался также с скручиваются и Еореп с тем же результат.

У кого-то есть советы?

ответ

0

Вы можете использовать «@» перед тем, чтобы игнорировать предупреждение: @Image::open($path)->fixOrientation()->save($dest, $type, $quality);

То есть много людей, жалующихся об этом через Интернет. Вероятно, некоторые данные exif с ошибкой. Если вы работаете так, как хотите, просто зарегистрируйте его и перейдите.

+4

Привет, спасибо за совет, но моя проблема не в предупреждении (что обертка библиотеки), но почему я не могу проверить данные exif. В это время я не могу зафиксировать ориентацию какого-либо изображения, и это разочаровывает. – stuzzo

+0

Попробуйте следующее: '-> useFallback (false)': https://github.com/Gregwar/Image/issues/96 –

+0

@stuzzo: вы нашли какое-либо обходное решение? – auco

0

Я также столкнулся с этой проблемой, используя exif_get_data. Я могу обрабатывать изображения на моем localhost (PHP v5.4.15), но на моем веб-хосте (PHP v5.6.22) ошибку «незаконный размер IFD», хотя я пробовал метод предупреждения «@» игнорировать. Я обнаружил, что на веб-хосте (будь то из-за разной версии или установки) exif_get_data на самом деле бросает исключение, а не выдаёт предупреждение. Я использую данные EXIF, чтобы переориентировать картину, если она повернута, так что если данные EXIF ​​неисправен или нет, я просто игнорировать его и ничего не делать, вот фрагмент кода:

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

Стандартная функция PHP не генерирует исключений. –

2

PHP 5.6.2x имеет ошибку с ее EXIF-возможностями (см. ошибку #72914, а также #72819 для получения дополнительной информации). Попытка прочитать данные EXIF ​​приведет к одной из описанных ошибок (недопустимый размер IFD, неверные данные IFD и т. Д.).

В настоящее время (2016-11-21) нет исправления для ветви 5.6. В филиале ведется некоторое тестирование.

Внедрение локального исправления путем тестирования функции, генерирующей ошибки IFD, и при подтверждении предполагается, что EXIF ​​будет недоступен на время выполнения сценария.

(Вы можете исправить, что в загрузчик, если вы хотите, и «перегрузка» функции для возвращения по умолчанию ложного/0/нуля вместо того, чтобы указать, поломку)

+2

Я получаю это в php 7.0.21. – burzum

-1

вы можете поймать ошибку с 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 
    }