Ruby on Rails/jpmobileで機種に応じた画像を出力 http://www.ark-web.jp/sandbox/wiki/5779.html
- 前提
- ユーザーのプロフィール画像とか、投稿画像を携帯サイト上でも見せたい
- file_columnでアップロードさせた画像を管理
- 携帯サイトはjpmobileを使用
- 解決したい問題
- 機種に応じて最適な横幅の画像を用意してそれを使うようにしたいが、jpmobileではそのような機能はないらしい
- ユーザーが投稿する画像はgif, jpg, pngなどさまざまだが、3キャリアで使えるJPGに変換したい
- exifやprofileなどの情報があると容量が増えるので、除去したい
- http://underscore.jp/diary/20071207.html こちらにあるフォーマット変換ができるようにするpatchを当てる(ありがとうございます! m(_ _)m )
- file_columnの画像変換部分をちょっと修正して、exifなどを除去
- vendor/plugins/file_column/lib/magick_file_column.rb の110行目付近
img.profile!("*", nil) # この行を追加 ensure img.write(dest_path) do
- vendor/plugins/file_column/lib/magick_file_column.rb の110行目付近
- モデルクラスにてモバイル用画像をversionsに指定
file_column {:image, :permissions => 0666, :magick => {:geometry => "800x800>", :versions => {:pc_thumb => {:crop => "1:1", :size => "200x200!"}, :mobile_thumb => {:crop => "1:1", :size => "80x80!", :format => "JPG"}, :mobile_middle => {:crop => "1:1", :size => "150x150!", :format => "JPG"}, :mobile_large => {:crop => "1:1", :size => "320x320!", :format => "JPG"}}} - サムネイルが80px、拡大画像は、機種の横幅が240未満なら150px、240以上なら320pxを使用することに
- 拡大画像を表示する画面のアクションメソッド(コントローラー内)にて、機種ごとにタイプを動的に判定
@image_version = request.mobile.display.width.to_i > 240 ? :mobile_large : :mobile_middle
- ビューにて、次のように使用
= image_tag(url_for_image_column(user, "image", @image_version)
- ファイルがアップロードされた後からversionsを追加しても(たとえばPC版を先にリリースしてて、モバイル版を後からリリースした場合とか)、url_for_image_columnは、画像がないなら作ってくれるので非常に楽!
- ライブラリの作者の皆様、ありがとうございます。m(_ _)m
![[PukiWiki] [PukiWiki]](image/sandbox.gif)



