J'ai un processeur d'image: xxx, et j'ai deux styles dans le modèle: grand et: pouce.paperclip exécuter processeurs sur le style sélectionné
Comment je peux traiter avec: xxx seulement l'image: thumb qui laisse la: grande image intacte?
J'ai un processeur d'image: xxx, et j'ai deux styles dans le modèle: grand et: pouce.paperclip exécuter processeurs sur le style sélectionné
Comment je peux traiter avec: xxx seulement l'image: thumb qui laisse la: grande image intacte?
Par défaut, la tâche Rake actualise toutes les vignettes. Gardez à l'esprit qu'il ne touchera/ne traitera pas l'image originale. Vous pouvez avoir une classe look at the Rakefile et Attachment et modifier pour vous permettre de spécifier une taille de vignette spécifique, mais la conception actuelle suppose que vous voulez prendre l'original et refaire toutes les vignettes de l'original.
Je l'ai compris - ce n'est pas élégant, mais ça a marché pour moi.
Un de vos styles doit avoir des dimensions différentes de tous les autres styles. De cette façon, dans votre processeur Paperclip personnalisé, vous pouvez voir si le contenu de la chaîne de commande contient les dimensions données. Si oui, vous feriez un traitement spécial, sinon, vous ne le feriez pas.
(je clipsé ce code - et l'a modifié - de Railscast Ryan Bate Episode 182.)
module Paperclip
class Cropper < Thumbnail
def transformation_command
SPECIAL_PROCESSING_FLAG = "150x150"
if crop_command && super.include?(SPECIAL_PROCESSING_FLAG)
crop_command + super.sub(/ -crop \S+/, '')
else
super 'do nothing fancy
end
end
def crop_command
target = @attachment.instance
if target.cropping?
" -crop '#{target.crop_w.to_i}x#{target.crop_h.to_i}+#{target.crop_x.to_i}+#{target.crop_y.to_i}'"
end
end
end
end
Dans ma situation, il n'a pas d'importance que nous retraitée dans le cas non spécial aussi, puisque le résultat final n'a rien changé.
J'ai récemment eu un problème similaire et j'ai trouvé cette solution sur un forum. J'espère que cela aide!
has_attached_file :screenshot,
:default_style => :full,
:styles => {
:full => "280x210",
:cropped => { :processors => [:screenshot_crop] }
}
Merci pour le pourboire! Il semble que vous devriez fournir le paramètre ': geometry' de toute façon -': cropped => {: geometry => 'quelquechose',: processors => [: screenshot_crop]} 'sinon il donne' méthode indéfinie \ [] 'pour nil: NilClass'. – jibiel
Ajouter ce code à votre fichier paperclip.rake:
desc "Reprocesses your attachments style (set CLASS, ATTACHMENT and STYLE)"
task :style => :environment do
module JustForOneDay
NAME = ENV['STYLE']
end
module ::Paperclip
class Attachment
def post_process_styles #:nodoc:
@styles.each do |name, args|
if JustForOneDay::NAME == name
begin
raise RuntimeError.new("Style #{name} has no processors defined.") if args[:processors].blank?
@queued_for_write[name] = args[:processors].inject(@queued_for_write[:original]) do |file, processor|
Paperclip.processor(processor).make(file, args, self)
end
rescue PaperclipError => e
log("An error was received while processing: #{e.inspect}")
(@errors[:processing] ||= []) << e.message if @whiny
end
end
end
end
end
end
for_all_attachments do |instance, name|
result = instance.send(name).reprocess!
end
end
end
testé avec Paperclip 2.3.1.1
Dans Paperclip 2.3.3 cela devrait être:
def post_process_styles #:nodoc:
styles.each do |name, style|
if JustForOneDay::NAME == name
begin
raise RuntimeError.new("Style #{name} has no processors defined.") if style.processors.blank?
@queued_for_write[name] = style.processors.inject(@queued_for_write[:original]) do |file, processor|
Paperclip.processor(processor).make(file, style.processor_options, self)
end
rescue PaperclipError => e
log("An error was received while processing: #{e.inspect}")
(@errors[:processing] ||= []) << e.message if @whiny
end
end
end
end
C'est facile, il suffit d'aller au fichier attachment.rb dans votre version trombone.
Et y a-t-il une autre option pour recadrer seulement l'image: thumb en laissant les autres seuls? Je veux dire sans modifier la classe Attachment? Peut-être du code supplémentaire dans le modèle/contrôleur? – astropanic