クラウド時代のWebアプリケーション・スマートフォンアプリを開発・運用する会社です。 03-4577-8680 03-6673-4950

画像が90度回転してしまっているのをサーバ側で直す(Exif + Orientatio nタグ + ImageMagick + PHP

2012-07-20

iPhone / iPadは、縦に持って写真を撮った場合でも、内部的には横長のJPG画像+ExifのOrientationタグで回転角度を埋め込んで保存しているようです。

ではこの画像を取り出して表示・使用する場合にどうなるかというと、Orientationタグを見て縦に表示するか否かは表示するソフトウェアによる、ということになります。
しかし、投稿画像がユーザー環境によって見え方が変わるというようなことになると、これはちょっと避けたいと思うわけです。

たまたま今回、この問題に直面しているサイトが、アップロード画像をImageMagickでリサイズしてから保存しているのでした。
既存の記述(の中のImageMagickコマンド部分)はこういう状態です。

convert -resize 640×480 orgfile.jpg distfile.jpg

この既存の処理と一緒に走らせられないかなーというのが今回のお題です。

ということでさっさと結論を書いてしまうと、「-auto-orientオプションを付ける」でした。

convert -auto-orient -resize 640×480 orgfile.jpg distfile.jpg

このコマンドで生成されたファイル(例中 ” distfile.jpg ” )は、
・Orientationの値通りに回転
・Orientationは ” 1 ” にセット
・他のExif情報はそのまま持ち越し
という状態で(+リサイズされて)保存されます。

なお、オマケとして、「ていうかそもそもExif全部消したい」というオーダーを盛り込むには、-stripオプションを付けて

convert -auto-orient -strip -resize 640×480 orgfile.jpg distfile.jpg


・Orientationの値通りに回転
・Exif全削除
という挙動になります。

ということで、想像していたよりサクっとした手段があってありがたいです。

余談になりますが、GDの場合は、画像処理前にexif_read_data関数でExifを取得し、Orientationの値(1〜8)によってimagerotateで回転させる、ということになりますね。
そのまんまの記述がexif_read_dataのノートに掲載されています。