iOS標準の「写真」アプリでの回転処理は画質が劣化するのかしないのか調べた
2014/09/09
価値ある情報をユーザー視点で発信するブログ
2014/09/09
テーブルの上の物をiPhoneで撮影するシチュエーションなどで、写真の縦横がおかしくなってしまうことがあります。
以下の写真は、テーブルの上のiPhoneを横位置で撮影したつもりですが、縦位置の写真になってしまいました。
縦位置で持っていたiPhoneを水平にしてから回転すると、こうなりがちです。
しかし、最近のiOS標準の「写真」アプリには、これを修正する機能が搭載されています。
「編集」をタップ。
画面左下の回転アイコンをタップして修正できました。これを保存すれば修正完了。(続きは[Read More]から)
以前から、このiOS標準の「写真」アプリでの回転処理は、画質の劣化を伴うのか否かが気になっていました。
JPEGは非可逆圧縮の画像フォーマットですので、基本的には画質の劣化を通じてのみ画像の修正ができるわけですが、気の利いたソフトウェアには、メタデータ(EXIF)だけ変更する、あるいはDCT圧縮後のデータの並べ替えにより縦横を入れ替える手法による、無劣化での回転処理をするものがあります。
@hitoriblog 「DCT圧縮後のデータの並べ替えにより縦横を入れ替える」という手法なんですよね… http://t.co/RCh2TjL7jX の「ジグザグスキャン」の順番を入れ替えるのが基本になります
— 後藤 浩昭 / GORRY (@gorry5) September 8, 2014
iOS標準の「写真」アプリがそれをやっているのかどうかが気になっていたわけです。
そこで、母艦に回転処理前と処理後の両方の画像を取得。
そのファイルサイズを比較したところ、両者一致しました。圧縮率が同じなら、再圧縮をすれば画質の劣化でファイルサイズは小さくなりますので、iOS標準の「写真」アプリは回転処理だけなら画質の劣化は生じない、と結論付けてよさそうです。
これからは、ためらいなく回転処理できますね。
元の画像と、iOS標準の「写真」アプリで90度回転させて保存した画像を用意。
そのバイナリダンプを取得。
$ hexdump IMG_0621_org.JPG > IMG_0621_org.hex $ hexdump IMG_0621.JPG > IMG_0621.hex
その差分を取ってみました。
$ diff -u IMG_0621.hex IMG_0621_org.hex
結果、違いは1バイトだけでした。(一部抜粋)
-0000030 00 03 00 00 00 01 00 08 00 00 01 1a 00 05 00 00 +0000030 00 03 00 00 00 01 00 01 00 00 01 1a 00 05 00 00
さらに、90度回転させたものをどんどん回転しては「保存」ボタンを押し、360度回して元の向きに戻したものとの差分を取ってみたところ、二つの画像のバイナリは完全に一致しました。
iOS標準の「写真」アプリでの画像回転は可逆的な変更を加えるだけなので、画質の劣化を心配する必要はありません。