Los procesadores de ejecución Paperclip en el estilo seleccionado
-
19-09-2019 - |
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
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.