Проблема ориентации изображения Android на Motorola Droid - PullRequest
4 голосов
/ 06 апреля 2010

Наше приложение использует действие выбора галереи, чтобы получить изображение с устройства и загрузить его в новое сообщение блога.На Moto Droid мы видим, что изображения, снятые в портретной ориентации, отправляются обратно в приложение в альбомной ориентации, поэтому изображение перекошено.AFAIK это происходит только на Droid.

Обнаружил это через Google, но нам нужно загрузить полноразмерное изображение в правильной ориентации, чтобы решение не работало для нас:

http://groups.google.com/group/android-developers/browse_frm/thread/1246475fd4c3fdb6?pli=1

Простой способ воспроизвести это - сделать снимок в портретном режиме на Droid, а затем отправить его себе через Gmail.В сообщении электронной почты изображение будет в альбомной ориентации (сбоку).Я тестировал обновление droid 2.1, и проблема все еще существует.

Вот еще немного информации:

Я взглянул на информацию об изображении в фотошопе, и у него есть эта строка:

<tiff:Orientation>1</tiff:Orientation>

В этой спецификации (http://www.awaresystems.be/imaging/tiff/tifftags/orientation.html) указано, что значение 1 равно:

1 = 0-я строка представляет визуальную вершину изображения, а0-й столбец представляет визуальную левую сторону.

В этом случае не так ли неправильно? Верхняя часть изображения в моем случае - это правая сторона, а 0-й ряд - это левая сторона., который, я думаю, должен быть равен 5 для ориентации tiff.

1 Ответ

2 голосов
/ 06 апреля 2010

Я думаю, что это может быть ошибка в коде вашего сервера с тегами EXIF. На моем Droid с 2.1 я сделал снимок в портретном режиме, как вы упомянули, и исследовал сохраненный результат (например, по электронной почте). При открытии файла в режиме предварительного просмотра (на Mac) он выглядит правильно.

С помощью удобного инструмента exif (port install exif на Mac) я смог напечатать информацию EXIF:

$ exif -t Orientation image.jpg 
EXIF entry 'Orientation' (0x112, 'Orientation') exists in IFD '0':
Tag: 0x112 ('Orientation')
  Format: 3 ('Short')
  Components: 1
  Size: 2
  Value: right - top

Теперь, если вам нужно стереть информацию EXIF, что может происходить при обмене данными между сервером и клиентом:

$ exif --ifd=0 --tag=Orientation --set-value= -o image2.jpg image.jpg 
Wrote file 'image2.jpg'.

$ exif -t Orientation image2.jpg 
EXIF entry 'Orientation' (0x112, 'Orientation') exists in IFD '0':
Tag: 0x112 ('Orientation')
  Format: 3 ('Short')
  Components: 1
  Size: 2
  Value: 

Полученное изображение будет в альбомной ориентации.

Итак, суть в том, что Я думаю, что Droid хранит биты в изображении всегда в альбомной ориентации и полагается на метаданные EXIF ​​для хранения информации о ротации (что совершенно верно), и ваше приложение может отбрасывать эту информацию .

Надеюсь, это поможет! Не стесняйтесь комментировать или редактировать оригинальный вопрос для дальнейшего устранения неполадок.

...