2017年2月13日月曜日

carrierwaveで画像のwidthとheightを取る

carrierwaveで画像をS3にアップロードするのですが、
一定のwidthとheightより小さいものはアップロードしないように
validateではじきたいなということでwidthとheightを取得する方法を調べました。

やり方としては、modelにwidthとheightの値を格納する変数を用意して、
uploaderでwidthとheightに格納する処理を記述すればよいようです。
保存をする前にwidthとheightを取ることができるので、
自分で比較してはじいたり、validateではじいたりどちらもできます。
class Image < ActiveRecord::Base
  mount_uploader :image, ImageUploader

  attr_accessor :width, :height
end

class ImageUploader < CarrierWave::Uploader::Base
  process :store_dimensions

  def store_dimensions
    if file && model
      model.width, model.height = `identify -format "%wx%h" #{file.path}`.split(/x/)
    end
  end
end

参考URL
https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Get-image-dimensions

0 件のコメント:

コメントを投稿