Work Records

日々の作業記録です。ソフトウェアエンジニアリング全般から、趣味の話まで。

Titanium mobileのopenPhotoGalleryで取得した画像が縦につぶれる問題

現象 (※android限定)

Titanium.Media.openPhotoGalleryでフォトアルバムから取得した画像のwidthとheightが逆になっているような状態になる。

以下の感じで取得している。
画像自体が回転しちゃっているのであればなんか納得も行くが画像は回転せずに縦横だけ逆になっているので、そのままの値を使って描画すると縦につぶれたような状態になる。

Titanium.Media.openPhotoGallery({
  success:function(event) {
  },
  error: function(error) {
  },
  mediaTypes:[Ti.Media.MEDIA_TYPE_PHOTO],
  allowEditing:false
});

なぜ?

わからない。。。

この記事によると、1920pixelを超える画像でなんかおかしな事が起きるっぽい、けどあんまり関係ないかも、という感じ。
でも、この現象が起きているのは手元で見る限りは1920pixelを超えているものばかり。
http://qiita.com/atsusy/items/a281c586d43db23df2f2

対策

対象画像のorientationを見ると90度回転しているようだった。

このモジュールを使って画像の回転を出してみたらどうやら回転していると見なされているようだった。

なので、こんな感じで回転を検知してごにょることにした。

success:function(event) {
  var orgImage = event.media;
  if (ImageFactory.getExifTag(orgImage.nativePath, ImageFactory.TAG_ORIENTATION) == 6) {
     // フラグ立てたり、とかの処理。
  }

納得いかない

画像が回転しているのであれば単に横に倒れて表示されれば良いと思うんだけど、画像自体の向きは合っていてwidthとheightだけが逆になっているので、中身がどうなっているのかは正直よくわかっていない。
ちゃんと中身を読まないとこれ以上はわからなそうだけど元気も無いのでひとまず良しとする。
なんか結構悩んで時間を使ってしまった。。。