Pregunta

tengo una: procesador de imagen xxx, y tengo dos estilos en el modelo: grande y:. Pulgar

¿Cómo puedo procesar con: XXX sólo el: pulgar dejando el: imagen grande sin tocar

¿Fue útil?

Solución

Por defecto, la tarea Rake refresca todas las miniaturas. Tenga en cuenta que no tocará / proceso de la imagen original.

Usted podría tener un rel="nofollow mirar el Rakefile la href="http://github.com/thoughtbot/paperclip/blob/d97f814a9972b4a4cea0359ae9cac05c3c8cedea/lib/paperclip/attachment.rb" rel="nofollow noreferrer"> Adjunto clase y modificar para permitir que especifique un tamaño de miniatura específica, pero el diseño actual supone que usted quiere tomar el original y rehacer todas las miniaturas de la original.

Otros consejos

Hace poco tuve un problema similar y encontré esta solución en un tablón de anuncios. ¡Espero eso ayude!

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

Añada este código a su archivo 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

Probado con Paperclip 2.3.1.1

En este Paperclip 2.3.3 debe ser:

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

Es muy fácil, sólo tiene que ir a attachment.rb archivo en su versión clip.

Me kludged esto - no es elegante, pero funcionó para mí

.

Uno de los estilos deben tener dimensiones diferentes de todos los otros estilos. De esta manera, en su aduana Procesador Paperclip, se puede ver si el contenido de la cadena de comandos contienen las dimensiones dadas. Si es así lo haría un procesamiento especial, si no, no lo haría.

(recorté este código - y modifiqué - a partir de Ryan Bate Railscast Episodio 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

En mi situación no importaba que reprocesado en el caso que no sea especial también, ya que el resultado final no cambió nada.

scroll top