imagecreatefromjpeg не вращающееся изображение

У меня проблемы с imagecreatefromjpeg и поворотом изображения.

Чтобы быть более конкретным:

Изображение № 1 https://dl.dropboxusercontent.com/u/9271284/stackoverflow/20160124112643911541_orig.jpg правильно поворачивается с помощью imagecreatefromjpeg (тег exif учитывается), но не в программе просмотра фотографий Picasa или Win10.

В моем коде нет поворота, когда я говорю «правильно поворачивается с помощью imagecreatefromjpeg», я имею в виду буквально. Просто делая

$img = imagecreatefromjpeg($filename);

изображение загружено из файла и правильно повернуто. Я использую PHP 5.5.31-2+deb.sury.org~trusty+1 с GD версии 2.1.1-dev.

Изображение № 2 https://dl.dropboxusercontent.com/u/9271284/stackoverflow/20160125070736520868_orig.jpg неправильно поворачивается с помощью imagecreatefromjpeg (тег exif не учитывается), но правильно поворачивается в программе просмотра фотографий Picasa и Win10.

Кроме того, с помощью отличного средства просмотра Exif Viewer Джеффри результаты http://regex.info/exif.cgi согласуются с тем, что Я вижу из imagecreatefromjpeg.


person Vnuk    schedule 25.01.2016    source источник
comment
Не могли бы вы показать код вращения?   -  person Alex Blex    schedule 25.01.2016
comment
Я должен был быть более ясным в своем вопросе, нет кода ротации. Я обновлю.   -  person Vnuk    schedule 25.01.2016
comment
Итак, как узнать, вращается он или нет? getimagesize возвращает правильные значения для обоих изображений.   -  person Alex Blex    schedule 25.01.2016
comment
У меня есть глаза, поэтому я вижу, что он не вращается. Как я уже сказал, я получаю точно такое же поведение от imagecreatefromjpeg и Exif Viewer Джеффри.   -  person Vnuk    schedule 25.01.2016
comment
Извините, может мне глаза врут, но exif-теги для второго изображения читаются как 'ExifImageWidth' =>3264, 'ExifImageLength' =>2448, т.е. альбомная ориентация. Это именно то, что я вижу на странице Джеффри Exif Viewer.   -  person Alex Blex    schedule 25.01.2016
comment
Да, и это нормально. Однако, когда это изображение загружается в imagecreatefromjpeg, оно не поворачивается, и я должен сделать для него imagerotate($img, -90). Однако это не обязательно для первого изображения, и это мой вопрос все время.   -  person Vnuk    schedule 25.01.2016
comment
Ясно не вижу в чем проблема. Оба изображения отображаются в альбомной ориентации в соответствии с тегами exif. Если повернуть, получится книжная ориентация.   -  person Alex Blex    schedule 25.01.2016
comment
Первое изображение НЕ отображается в альбомной ориентации при использовании программы просмотра Джеффри Exif Viewer и imagecreatefromjpeg. У меня нет способа определить, нужно ли мне повернуть изображение с помощью imagerotate или нет.   -  person Vnuk    schedule 25.01.2016
comment
Я только что нашел этот вопрос через Google. Раньше у меня был телефон Nokia Lumia. Я открыл фотографии, сделанные с помощью imagecreatefromjpeg, и они были показаны в правильной ориентации. Сегодня я открыл фотографии, сделанные с помощью телефона S9, и ориентация неверна. Пытаюсь понять причину.   -  person Bernhard Döbler    schedule 14.08.2018


Ответы (1)


Несколько нелогично, но на самом деле изображение № 2 отображается правильно, а изображение № 1 повреждено.

Оба изображения имеют значение ориентации EXIF, равное 6, что означает, что изображение повернуто на 90 градусов против часовой стрелки. (Обратитесь к этот замечательный пост подробнее об ориентации EXIF.)

imagecreatefromjpeg никак не преобразует изображения. Он загружает изображение «сырое». Это только выглядит так, как будто оно повернуто, потому что ваше средство просмотра по умолчанию (миниатюры Windows/средство просмотра фотографий Windows?) автоматически делает это на основе значения EXIF. Exif Viewer Джеффри также показывает необработанное изображение, поэтому ваши результаты согласуются.

В соответствии с этим значением для правильного отображения обоих изображений вы должны выполнить преобразование поворота на 90 градусов по часовой стрелке:

$img = imagerotate($img, -90, 0);

Это дает следующий результат (изображения здесь уменьшены):

Изображение №1:

введите здесь описание изображения

Изображение № 2:

введите здесь описание изображения

Это именно то, что я вижу для обоих изображений в программе просмотра фотографий Win8. Итак, поскольку изображение № 1 имеет неправильное значение ориентации, невозможно правильно повернуть его с помощью кода.

person timclutton    schedule 25.01.2016
comment
И это явно неправильно для изображения №1. Какова ваша точка зрения? - person Vnuk; 25.01.2016
comment
Ваше изображение имеет неправильное значение ориентации. Невозможно правильно показать его на основе значения ориентации, которое оно имеет. - person timclutton; 25.01.2016
comment
Первое изображение испорчено тупым редактором. Спасибо, что открыли мне глаза. - person Vnuk; 25.01.2016
comment
Пожалуйста. Ориентация EXIF ​​— это настоящая боль, с которой нужно справиться и сделать правильно. Я отредактировал свой пост для ясности. - person timclutton; 25.01.2016