前提
gem 'carrierwave'
gem 'mini_magick'
・ 画像投稿機能は実装済とする(投稿機能の参考リンクは下に記述します)
・ 中間テーブルで画像を管理
###環境
・Rails 5.2.3
・ruby 2.5.1
コード
結果から記述しますと下記の様になります。
def dynamic_resize_fill
if defined? model.class::THUMBNAIL_SIZE
size = model.class::THUMBNAIL_SIZE
else
size = [540, 540]
end
resize_to_fill size[0], size[1], "NorthWest"
end
version :thumb do
process :dynamic_resize_fill
end
process resize_to_fit: [800, 800]
belongs_to :user
THUMBNAIL_SIZE = [780, 400]
mount_uploader :image, ImageUploader
説明
画像投稿可能なモデルで適当な変数に好きな画像サイズを定義します。[横ピクセル, 縦ピクセル]↓
belongs_to :user
THUMBNAIL_SIZE = [780, 400]
mount_uploader :image, ImageUploader
画像投稿の際に、「THUMBNAIL_SIZE」が定義されていれば定義されていたサイズを使用する。
していなければ、[540, 540]を使用します。
"NorthWest"は中心点を左したに指定しています。(default: center) ⇨ Link : ImageMagick Gravity 指定
↓
def dynamic_resize_fill
if defined? model.class::THUMBNAIL_SIZE
size = model.class::THUMBNAIL_SIZE
else
size = [540, 540]
end
resize_to_fill size[0], size[1], "NorthWest"
end
投稿される際に、version :thumbでサムネイル用の画像が生成されます。
process :dynamic_resize_fill は上記の関数(dynamic_resize_fill)を呼び出して、サイズと中心点を決定します。
↓
version :thumb do
process :dynamic_resize_fill
end
参考
画像投稿
https://qiita.com/matcham/items/ab8158dba16d2f21fd85
ImageMagick Gravity 指定(中心点)
https://qiita.com/yoya/items/b6926f01b7cb90217e07
サムネイルのサイズをモデルごとに変更
https://nabeatsu.hatenablog.com/entry/2017/09/18/134107
CarrierWave+MiniMagickで使う、画像リサイズのメソッド
https://qiita.com/wann/items/c6d4c3f17b97bb33936f