Tengo un procesador de imagen xxx y tengo dos estilos en el modelo: grande y: pulgar.procesadores para ejecutar clips en el estilo seleccionado
Cómo puedo procesar con: xxx solo la imagen: thumb dejando la imagen grande intacta?
Tengo un procesador de imagen xxx y tengo dos estilos en el modelo: grande y: pulgar.procesadores para ejecutar clips en el estilo seleccionado
Cómo puedo procesar con: xxx solo la imagen: thumb dejando la imagen grande intacta?
De forma predeterminada, la tarea Rake refresca todas las miniaturas. Tenga en cuenta que no tocará/procesará la imagen original.
Puede tener una clase look at the Rakefile y Attachment y modificarla para permitirle especificar un tamaño de miniatura específico, pero el diseño actual asume que desea tomar el original y volver a hacer todas las miniaturas del original.
Me negué esto - no es elegante, pero funcionó para mí.
Uno de sus estilos debe tener dimensiones diferentes de todos los demás estilos. De esta forma, en su procesador Paperclip personalizado, puede ver si el contenido de la cadena de comando contiene las dimensiones especificadas. Si es así, harías un procesamiento especial, si no, no lo harías.
(recorté este código - y modificar que - a partir Railscast episodio 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
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.
Recientemente tuve un problema similar y encontré esta solución en un tablero de mensajes. ¡Espero eso ayude!
has_attached_file :screenshot,
:default_style => :full,
:styles => {
:full => "280x210",
:cropped => { :processors => [:screenshot_crop] }
}
¡Gracias por la sugerencia! Parece que debes proporcionar el parámetro ': geometry' de todos modos -': cropped => {: geometry => 'whatever',: processors => [: screenshot_crop]} 'de lo contrario da' undefined method \ '[] 'for nil: NilClass'. – jibiel
Añadir 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 Paperclip 2.3.3 Esto debería 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 fácil, solo vaya al archivo attachment.rb en su versión de clip.
¿Y hay otra opción para recortar solo la imagen: thumb dejando a los demás en paz? Quiero decir, sin modificar la clase Attachment? ¿Tal vez algún código adicional en el modelo/controlador? – astropanic