В настоящее время я использую Paperclip для загрузки изображения и автоматического создания эскиза. Теперь я также хотел бы добавить второй стиль, который генерирует изображение шириной в один пиксель, используя самый левый столбец пикселей в загруженном изображении (оно также должно иметь ту же высоту, что и исходное изображение). Я буду использовать изображение шириной в один пиксель в качестве повторяющегося фона с помощью CSS.
Можно ли сгенерировать это фоновое изображение с помощью обработчика эскизов Paperclip по умолчанию, или мне нужно будет создать свой собственный обработчик? Я уже пытался создать собственный процессор, который является подклассом Paperclip::Processor
, но я не понял, как правильно использовать метод Paperclip.run
. Теперь я пытаюсь создать подкласс Paperclip::Thumbnail
на основе Railcast Райана Бейта здесь: http://railscasts.com/episodes/182-cropping-images, но это вызывает эту ошибку:
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'
Строка 11 файла images_controller.rb:
@image = @review.images.build(params[:image])
Строка 11 файла images_controller.rb работает нормально, если я не пытаюсь использовать пользовательский процессор Autobackground, поэтому ошибка должна быть кодом в процессоре.
Вот мой код:
#/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