Неправильная ориентация Jcrop от загрузки Iphone, как я могу это сделать?

У меня есть сайт с моим инструментом jCrop, который создает этот поток:

пользователи загружают фотографии -> они обрезают его -> они загружают его на моем сервере

Проблемы возникают, когда я пытаюсь загрузить фотографию с камеры iphone. 1- Если я загружаю изображение с iphone, он выглядит правильно ориентированным в режиме предварительного просмотра / обрезки, а затем после загрузки php я вижу результат в неправильной ориентации.

2- Если я загружаю снимок с помощью iphone с помощью компьютера, изображение отображается неправильно ориентированным (вертикальная фотография поворачивается на 90 градусов) в режиме предварительного просмотра / обрезки.

Я попытался удалить exif с php, но проблема остается, потому что неправильная ориентация управляется exif и JCrop. Это мой Jcrop init:

// initialize Jcrop $('#preview').Jcrop({ minSize: [167, 125], // min crop size maxSize: [1500, 1125], // max crop size// min crop size aspectRatio : 500/375, // keep aspect ratio 1:1 bgFade: true, // use fade effect bgOpacity: .3, // fade opacity boxWidth: 600, onChange: updateInfoFoto, onSelect: updateInfoFoto }, function(){ // use the Jcrop API to get the real image size var boundsFoto = this.getBounds(); boundxFoto = boundsFoto[0]; boundyFoto = boundsFoto[1]; // Store the Jcrop API in the jcrop_api_foto variable jcrop_api_foto = this; }); 

Есть ли способ решить эту проблему, связанную с iphone? Если нет, есть другой инструмент для обрезки, который не влияет на эту ошибку?

Solutions Collecting From Web of "Неправильная ориентация Jcrop от загрузки Iphone, как я могу это сделать?"

iPhones управляют изображениями в браузере с использованием данных ориентации exif. Поэтому, если у вас есть изображение, которое физически находится в ландшафтном режиме (например, на сервере, ширина> высота), но изображение было снято с помощью iphone в портретной ориентации, оно будет использовать тег для поворота изображения в браузере на iphone. (в настольных браузерах это не произойдет)

Это вызывает проблемы для jCrop.

Поскольку jCrop не имеет кода для этого (хотя, вероятно, это и должно быть), я использовал решение, в котором сначала загружаю изображение на сервер, исправляю поворот и обновляю exif с использованием кода на стороне сервера.

Таким образом, поток загрузки выглядит следующим образом:

  1. пользователь выбирает и загружает фото на сервер как есть
  2. когда загрузка отправляется, я создаю копию изображения, которое физически поворачивается в соответствии с ориентацией, указанной в данных exif, и обеспечивает соответствующее обновление данных exif. (например, если exif первоначально указывал поворот на 90 градусов по часовой стрелке, я делаю это вращение и обновляю exif так, чтобы он больше не указывал на это вращение)
  3. когда страница перезагружается после отправки, я показываю рабочую область jCrop с новой версией изображения.

Конечно, это работает, только если данные ориентации exif из загруженного изображения точны.