2011年12月2日

PaperclipでEXIF情報に従って画像を回転させる

 「スマートフォンから投稿した横向きの写真が縦に表示される」という苦情が寄せられまして、「スマホの本体を横に倒して撮影したのなら、写真を見るときも本体を横に倒せよ」と、スマホを持っていない自分は思ったのでした。 (゚Д゚)ハァ?

どうやらスマホには写真を撮影したときの本体の向きを加速度センサーで調べてJPEGファイルにEXIF情報として記録しておき、後で写真を見るときは本体の向きに合わせて回転させて表示してくれる便利機能が備わっているようです。 だからスマホユーザーにとっては「横向きに撮った写真は横」なのでしょう。

なおWindows標準のビューアーにはそういう機能がないため、スマホで撮った写真をPCに持ってくるとすべて縦向きに表示されてしまいます。

 そんなわけでスマホ時代の画像アップローダーには、投稿された写真をEXIF情報(Orientationタグ)に従って加工してから保存する機能が必須になります。

自分が現在Rails3の開発で画像投稿機能に採用しているプラグインはPaperclipです。 PaperclipはRubyでお馴染みのRMagickを介さず、直接ImageMagickを呼び出して画像処理を行うという特徴があります。

 まずImageMagickでEXIF情報に従った画像回転を行うには、次のようにconvertコマンド-auto-orientオプションを付けて実行します。
$ convert -auto-orient tate.jpg yoko.jpg

そしてPaperclipでこの機能を使うには、投稿画像を保存するモデルにconvertコマンドのオプションを書いた1行を追加します。
class User < ActiveRecord::Base
    has_attached_file :avatar,
        :styles => { :medium => "300x300>", :thumb => "100x100>" },
        :convert_options => { :all => "-auto-orient" }
end

:allで指定したオプションは全ての:stylesに適用されますが、originalの画像は未加工の状態で保存されます。

0 件のコメント:

コメントを投稿