У меня есть сайт с моим инструментом 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? Если нет, есть другой инструмент для обрезки, который не влияет на эту ошибку?
iPhones управляют изображениями в браузере с использованием данных ориентации exif. Поэтому, если у вас есть изображение, которое физически находится в ландшафтном режиме (например, на сервере, ширина> высота), но изображение было снято с помощью iphone в портретной ориентации, оно будет использовать тег для поворота изображения в браузере на iphone. (в настольных браузерах это не произойдет)
Это вызывает проблемы для jCrop.
Поскольку jCrop не имеет кода для этого (хотя, вероятно, это и должно быть), я использовал решение, в котором сначала загружаю изображение на сервер, исправляю поворот и обновляю exif с использованием кода на стороне сервера.
Таким образом, поток загрузки выглядит следующим образом:
Конечно, это работает, только если данные ориентации exif из загруженного изображения точны.