2009-07-22 6 views

Répondre

1

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.

+0

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

0

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é.

18

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] } 
} 
+0

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

1

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.

Questions connexes