主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ
書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。
2015/10/01
そんなことより風が強い
Carrierwave っていう、ファイルアップロードに便利な gem があるんだけれども、
その中にある HogeUploader クラスは、アップロード時に画像を加工できます。
class ImageUploader < CarrierWave::Uploader::Base
# RMagick を使ってやる、 MiniMagick の場合はその下のやつ
include CarrierWave::RMagick
# include CarrierWave::MiniMagick
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
process resize_to_fit: [200, 200]
end
こんな感じ。
アップロードした画像が、縦横比を維持して 200x200 に収まるようしてくれます。
ところで、Carrierwave は便利な機能があって、
version :thumb do
process risize_to_fit: [100, 100]
end
とかやっておけば、サムネイルみたいなものを作ってくれる。
で、このバージョンのサイズを動的に変えたい場合。
具体的には Model ごとにサイズを変えたかったり。
(User
は 64x64 で、 Article
は 300x50 みたいな感じ)
モデル
class User
THUMBNAIL_SIZE = [64, 64]
mount_uploader :icon, ImageUploader
...
end
# article.rb
class Article
THUMBNAIL_SIZE = [300, 50]
mount_uploader :banner, ImageUploader
...
end
アップローダー
class ImageUploader < CarrierWave::Uploader::Base
...
version :thumb, if: :has_thumbnail? do
process :dynamic_resize_to_fit
end
def dynamic_resize_to_fit
size = model.class::THUMBNAIL_SIZE
resize_to_fit size[0], size[1]
end
def has_thumbnail? new_file
model.class::const_defined? :THUMBNAIL_SIZE
end
end
こんな感じでできます。
あとは使いたいところで
.media-left
= image_tag(user.icon.thumb.url, class: "img-responsive")
とすると、生成されたものが取得できます。