J'utilise actuellement Paperclip pour télécharger une image et générer automatiquement une vignette. Maintenant, je voudrais aussi ajouter un second style qui génère une image d'un pixel à l'aide de la colonne de pixels la plus à gauche de l'image téléchargée (elle devrait également avoir la même hauteur que l'image originale). Je vais utiliser l'image d'un pixel de large comme arrière-plan répétitif via CSS.Recadrage personnalisé dans Rails avec Trombone
Est-il possible de générer cette image de fond à l'aide du processeur Thumbnail par défaut de Paperclip, ou devrais-je créer mon propre processeur personnalisé? J'ai déjà essayé de créer un processeur personnalisé qui sous-classe le Paperclip::Processor
, mais je n'ai pas compris comment utiliser correctement la méthode Paperclip.run
. Maintenant, je suis en train de sous-classe Paperclip::Thumbnail
basée sur Railcast ici Ryan Bate: http://railscasts.com/episodes/182-cropping-images, mais est de lancer cette erreur:
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'
Ligne 11 de images_controller.rb:
@image = @review.images.build(params[:image])
Ligne 11 de images_controller. rb fonctionne bien si je n'essaie pas d'utiliser le processeur personnalisé Autobackground, donc l'erreur doit être le code dans le processeur.
Voici mon code à ce jour:
#/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