2010-04-05 4 views
4

Наше приложение использует действие выбора галереи, чтобы захватить изображение с устройства, чтобы загрузить его в новое сообщение в блоге. Мы видим на Moto Droid, что изображения, сделанные на портрете, отправляются обратно в приложение в альбомной ориентации, поэтому изображение боком. AFAIK это происходит только на Droid.Проблема ориентации изображения Android на Motorola 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.

+0

Смотрите мой ответ здесь: http://stackoverflow.com/questions/29971319/image-orientation-android/32747566#32747566 Я испытал это на многих устройствах. –

ответ

2

Я думаю, что это может быть ошибка в коде сервера с тегами EXIF. На моем Droid с 2.1 я сделал снимок в портретном режиме, как вы сказали, и исследовал сохраненный результат (например, по электронной почте). Открывая файл в Preview (на 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 ​​для хранения вращения информации (что вполне допустимо), и ваше приложение может отбросить эту информацию ,

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

+0

thank, добавлено больше информации выше – roundhill

+0

Я также просто посмотрел информацию о файле для изображения, сделанного в ландшафте, и он имеет такое же значение ориентации «1». Я думаю, в этом проблема! – roundhill

+0

Я вижу то же самое. У меня есть код на стороне сервера, который автоматически поворачивает изображение на основе флага ориентации EXIF, и проблема в том, что Bitmap теряет все данные EXIF ​​между точкой сохранения его из приложения Camera и загружает его на сервер. Часть этого процесса включает использование BitmapFactory для пробоподготовки изображения, так как мне не нужно полное изображение. Просто нужно выяснить, как сохранить данные EXIF. Вернусь, если найду что-нибудь. – Joe