回形针在所选样式上运行处理器

我有一个:xxx图像处理器,我在模型中有两种样式:big和:thumb。 我如何处理:xxx只有:拇指图像离开:大图像未触摸过?

已邀请:

onon

赞同来自:

默认情况下,Rake任务刷新所有缩略图。请记住,它不会触摸/处理原始图像。 您可以使用look at the RakefileAttachment类,并修改它以允许您指定特定的缩略图大小,但当前设计假定您想要从原始缩略图中取出原始缩略图并重做所有缩略图。

zipsum

赞同来自:

我克服了这一点 - 这不是优雅的,但它为我工作。 其中一种样式的尺寸应与所有其他样式不同。这样,在您的自定义回形针处理器中,您可以查看命令字符串的内容是否包含给定的尺寸。如果是这样,你会做特殊处理,否则,你不会。 (我从Ryan Bate的Railscast 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
在我的情况下,我们在非特殊情况下也进行了重新处理并不重要,因为最终的结果没有任何改变。

sut

赞同来自:

我最近有一个类似的问题,并在留言板上找到了这个解决方案。希望能帮助到你!

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

womnis

赞同来自:

将此代码添加到您的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
用回形针2.3.1.1测试 在回形针2.3.3中,这应该是:
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
很简单,只需在回形针版本中找到attachment.rb文件即可。

要回复问题请先登录注册