中級プログラマの自宅でPHP ブログ

自宅用ポータルシステム「MyHome Portal」をオープンソースで公開。MyHome Portalの説明とエンハンス情報。

JPEG画像のロスレス(無劣化)回転

JPEG画像のロスレス(無劣化)回転について、テストしたことを簡単にまとめておきます。

デジカメで縦位置撮影してExifに縦位置情報が含まれている画像の回転についてテストしました。

コマンドベースで実行できる「azure_cui」、「NConvert(XnViewのコマンドラインイメージコンバータ)」、「IrfanViewIrFanView Graphic Viewer PlugIns」でテストしました。

● 元画像

Windowsエクスプローラでは左回転した横位置状態で表示される。

Exif対応画像ビューワでは、縦位置で表示される。

azure_cui (Ver.1.15)

azure_cui -r -e -c -w src.jpg out.jpg

→回転結果:Windowsエクスプローラでは縦位置表示されるが、Exif対応画像ビューワでは右回転した横位置状態で表示される。

NConvert (v5.54 / XnView v1.97)

NConvert -jpegtrans rot90 -rmeta -o out.jpg src.jpg

→回転結果:Windowsエクスプローラでも、Exif対応画像ビューワでも、右回転した横位置状態で表示される。

IrfanView (Ver.4.25)

i_view32 src.jpg /jpg_rotate=(3,1,0,1,0,0,0,0) /convert=

→回転結果:Windowsエクスプローラでも、Exif対応画像ビューワでも、縦位置状態で表示される。

ただし、Windowsエクスプローラのサムネイル画像は左回転した横位置状態で表示される。別フォルダにコピーすると、サムネイル画像も縦位置表示になります。

【2009/12/26追記】

i_view32 src.jpg /jpg_rotate=(6,1,0,1,0,0,0,0) /convert=

にすれば、左右関係なくEXIF情報に基づいて回転補正してくれます。

http://ok2nd.blog87.fc2.com/blog-entry-176.html

azure_cuiと、IrfanViewは、更新日付を保存できます。

ファイルサイズが6MB程度の画像の回転処理で、azure_cuiは数秒、NConvertは1秒程度、IrfanViewは瞬時(?)で処理されます。

IrfanViewでは、元ファイルをそのまま上書きします。/convert=でファイル名を指定しても、そこに書かれる画像データは圧縮されたものになってしまいます。

/convert=の引数自体を省略するとIrfanViewのウインドウが開いてしまいます。

rotate.jpg