私はPaperclipを使用して画像ファイルをオブジェクトに添付していますが、すべて問題ありませんが、アップロード時に画像をマスク(できれば画像スタイルの1つであるmain_featureのみ)したいと思います。を使用してマスクされた画像を保存することはできmasked_image.write('result.png')
ますが、ペーパークリップの画像属性を更新するために取得できないようです。次のコードでは、このエラーが発生します。
No handler found for /var/folders/q1/xf59whv514lgw_xr10hb208m0000gn/T/gaither-nomask20130312-80235-yaj1s7.png PNG 1020x470 1020x470+0+0 DirectClass 8-bit
has_attached_file :image,
:styles =>{
:main_feature => "1020x470",
:top_feature => "345x159",
:smallest => "229x131"
},
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3.yml",
:path => ":attachment/:id/:style.:extension",
:url => "/:id/:style/:basename.:extension",
:bucket => "bucketname"
after_image_post_process :post_process_image
def post_process_image
require 'rubygems'
require 'RMagick'
require "open-uri"
mask = Magick::ImageList.new
urlimage = open("http://bucket.s3.amazonaws.com/mask.png")
mask.from_blob(urlimage.read)
imgfile = Magick::Image.read(image.queued_for_write[:original].path).first
mask.matte = true
imgfile.matte = true
masked_image = imgfile.composite(mask, Magick::CenterGravity, Magick::CopyOpacityCompositeOp)
self.update_attribute(:image, masked_image)
end