процессоры запуска скрепок в выбранном стиле

StackOverflow https://stackoverflow.com/questions/1168016

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня есть процессор обработки изображений : xxx, и у меня есть два стиля в модели: big и :thumb.

Как я могу обработать с помощью: xxx только изображение: thumb , оставив нетронутым изображение: big?

Это было полезно?

Решение

По умолчанию задача Rake обновляет все эскизы.Имейте в виду, что он не будет касаться / обрабатывать исходное изображение.

У вас мог бы быть посмотрите на файл Rakefile и тот Привязанность создайте класс и измените, чтобы вы могли указать определенный размер миниатюр, но текущий дизайн предполагает, что вы хотите взять оригинал и переделать все миниатюры из оригинала.

Другие советы

Недавно у меня была похожая проблема, и я нашел это решение на доске объявлений.Надеюсь, это поможет!

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

Добавьте этот код в свой файл 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

В Paperclip 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 в вашей версии paperclip.

Я упустил это из виду - это не элегантно, но у меня это сработало.

Один из ваших стилей должен иметь размеры, отличные от всех других стилей.Таким образом, в вашем пользовательском процессоре скрепок вы можете увидеть, содержит ли содержимое командной строки заданные размеры.Если это так, вы бы выполнили специальную обработку, если нет, то вы бы этого не сделали.

(Я вырезал этот код - и модифицировал его - из эпизода 182 Railscast Райана Бейта.)

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

В моей ситуации не имело значения, что мы переработали и в неособом случае, поскольку конечный результат ничего не изменил.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top