LoginSignup
0
0

More than 3 years have passed since last update.

【画像投稿】サムネイルのサイズをモデルごと動的に変えて保存する (Rails carrierwave) 備忘録

Last updated at Posted at 2020-12-03

前提

gem 'carrierwave'
gem 'mini_magick'

・ 画像投稿機能は実装済とする(投稿機能の参考リンクは下に記述します)
・ 中間テーブルで画像を管理

環境

・Rails 5.2.3
・ruby 2.5.1

コード

結果から記述しますと下記の様になります。

image_uploader.rb
  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]
user_image.rb
  belongs_to :user
  THUMBNAIL_SIZE = [780, 400]
  mount_uploader :image, ImageUploader

説明

画像投稿可能なモデルで適当な変数に好きな画像サイズを定義します。[横ピクセル, 縦ピクセル]↓

user_image.rb
  belongs_to :user
  THUMBNAIL_SIZE = [780, 400]
  mount_uploader :image, ImageUploader

画像投稿の際に、「THUMBNAIL_SIZE」が定義されていれば定義されていたサイズを使用する。
していなければ、[540, 540]を使用します。
"NorthWest"は中心点を左したに指定しています。(default: center) ⇨ Link : ImageMagick Gravity 指定

image_uploader.rb
  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)を呼び出して、サイズと中心点を決定します。

image_uploader.rb
  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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0