現在、Paperclip を使用して画像をアップロードし、サムネイルを自動的に生成しています。ここで、アップロードされた画像の左端のピクセル列を使用して 1 ピクセル幅の画像を生成する 2 番目のスタイルも追加したいと思います (高さも元の画像と同じにする必要があります)。CSS を介して、1 ピクセル幅の画像を繰り返し背景として使用します。
Paperclip のデフォルトの Thumbnail プロセッサを使用してその背景画像を生成することは可能ですか?それとも独自のカスタム プロセッサを作成する必要がありますか? をサブクラス化するカスタム プロセッサを作成しようとしましたが、メソッドの適切なPaperclip::Processor
使用方法がわかりませんでした。ここで Ryan Bate の Railcast に基づいPaperclip.run
てサブクラス化しようとしています: http://railscasts.com/episodes/182-cropping-images、しかしそれはこのエラーをスローしています:Paperclip::Thumbnail
NoMethodError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]):
app/controllers/images_controller.rb:11:in `create'
images_controller.rb の 11 行目:
@image = @review.images.build(params[:image])
Autobackground カスタム プロセッサを使用しない場合、images_controller.rb の 11 行目は正常に動作するため、エラーはプロセッサ内のコードに違いありません。
これまでの私のコードは次のとおりです。
#/app/models/image.rb
class Image < ActiveRecord::Base
belongs_to :review
has_attached_file :image, :styles => {
:thumb => "32x32#",
:auto_bg => { :processors => [:autobackground] }
}
end
#/lib/paperclip_processors/Autobackground.rb
module Paperclip
class Autobackground < Thumbnail
def transformation_command
if crop_command
crop_command + super.sub(/ -crop \S+/, '')
else
super
end
end
def crop_command
target = @attachment.instance
if target.cropping?
" -crop '1x#{target.height}+0+0'"
end
end
end
end