Соблюдение ориентации EXIF ​​при отображении фотографий iPhone в Интернете - PullRequest
2 голосов
/ 17 марта 2010

Я занимаюсь разработкой приложения для камеры iPhone, которое загружает изображение в Amazon S3, и это изображение отображается на веб-сайте. Когда iPhone делает снимок, он всегда сохраняет фотографию в вертикальной ориентации, а ориентация, используемая для правильного просмотра фотографии, сохраняется в данных EXIF ​​изображения. Так что, если я сделаю фотографию на iPhone и открою ее в FireFox без обработки данных EXIF, изображение может быть перевернуто или перевернуто.

Моя проблема в том, что я не знаю, как отобразить фотографию в правильной ориентации на сайте. Мое текущее решение - повернуть фотографию в приложении для iPhone, но я бы не стал этого делать. Можно ли в любом случае соблюдать данные EXIF ​​при отображении в Интернете без предварительной обработки изображения?

Ответы [ 2 ]

2 голосов
/ 17 марта 2010

У вас есть несколько вариантов, перечисленных в моем порядке предпочтений.

  1. Поворот изображения на камере.
  2. Загрузите данные через Amazon EC2 и используйте программу, чтобы прочитать exif и выполнить ротацию
  3. Запустите на своем веб-сервере программу, которая проксирует s3 и выполняет ротацию.
  4. Используйте некоторые необычные Javascript и DHTML.

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

1 голос
/ 17 марта 2010

Поворот на камере может быть лучшим вариантом, но если вы поворачиваете перед сохранением, а изображение представляет собой JPEG, вращение - это операция с потерями - поэтому сохраненное вами изображение сразу же потеряет некоторое качество.

К счастью, так не должно быть - если вместо чтения в JPEG, поворота изображения и повторного кодирования в JPEG, есть способы применить вращение непосредственно к файлу.

JPEG хранится в виде серии ячеек 8x8 - их можно поворачивать и переставлять по отдельности без потери качества (с шагом 90 градусов) - тогда вам нужно обновить метаданные, которые имеют информацию о размере.

Вот код C ++, который вы можете попробовать перенести

http://eng.neologica.it/download/downloadIJGWin32.html

Для .NET моя компания ( Atalasoft ) предоставляет SDK, который может сделать это.

Другой вариант - чтение JPEG, вращение и сохранение в формате PNG, но размер файла будет намного больше.

...