Question

J'ai un: processeur d'image xxx, et j'ai deux styles dans le modèle: grand et:. Pouce

Comment puis-je traiter avec: xxx seulement: l'image du pouce en laissant la: grande image intacte

Était-ce utile?

La solution

Par défaut, la tâche Rake rafraîchit toutes les vignettes. Gardez à l'esprit qu'il ne touche pas / traiter l'image d'origine.

Vous pourriez avoir un regarder Rakefile et attachement classe 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.

Autres conseils

J'ai eu récemment un problème similaire et trouvé cette solution sur un babillard. J'espère que ça aide!

has_attached_file :screenshot,
 :default_style => :full,
 :styles => {
   :full => "280x210",
   :cropped => { :processors => [:screenshot_crop] }
 }

Ajoutez 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

Il est facile, il suffit d'aller à attachment.rb fichier dans votre version paperclip.

Je kludged cela - ce n'est pas élégant, mais ça a marché pour moi

.

L'un de vos styles doivent 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 contiennent les dimensions données. Dans ce cas, vous feriez un traitement spécial, sinon, vous ne.

(je clipsée ce code - et modifia - de Railscast épisode de Ryan Bate 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 importait peu que nous retraitée dans le cas non spécial aussi, puisque le résultat final n'a rien changé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top