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

2017年2月6日月曜日

MacOS Sierraでrmagickが入らない件

Mac Sierraでrmagickのインストールがエラーになったので調べました。

rubyのバージョンは以下のとおりです
ruby 2.3.1
RMagick 2.13.3
起きたエラーは以下です。
ERROR:  Error installing rmagick:
    ERROR: Failed to build gem native extension.

    /Users/xxx/.rbenv/versions/2.3.1/bin/ruby extconf.rb
checking for Ruby version >= 1.8.5... yes
checking for clang... yes
checking for Magick-config... no
Can't install RMagick 2.13.3. Can't find Magick-config in ...

調べてみるとImageMagickが入ってないからというのが多かったのですが、
ImageMagickはちゃんと入っていて、バージョンは7系でした。
ただ、バージョンが7系なのがだめなようで、これを6系のものに入れ替えると、
うまくrmagickをインストールすることができました。

brew uninstall imagemagick

brew install imagemagick@6

brew link --force imagemagick@6


参考URL
http://stackoverflow.com/questions/41647979/imagemagick-7-with-rmagick-2-16-on-macos-sierra-cant-find-magickwand-h