ruby-on-rails - rails - thoughtbot github
Rails Paperclip cómo utilizar las opciones de filtro de ImageMagick? (2)
Recientemente implementé Paperclip con Rails y quiero probar algunas de las opciones de filtro de ImageMagick, como blur . No he podido encontrar ningún ejemplo de cómo hacer esto. ¿Se pasa por: el estilo como otra opción?
:styles => { :medium => "300x300#", :thumb => "100x100#" }
La respuesta de @plang fue correcta, pero quería dar la solución exacta al desenfoque, en caso de que alguien estuviera mirando y encontrase esta pregunta:
:convert_options => { :all => "-blur 0x8" }
// -blur {radius}x{sigma}
Lo que cambió esto:
A esto:
No probé esto, pero debería poder usar el parámetro "convert_options", como este:
:convert_options => { :all => ‘-colorspace Gray’ }
Echa un vistazo a https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/thumbnail.rb
Personalmente uso mi propio procesador.
En Modelo:
has_attached_file :logo,
:url => PaperclipAssetsController.config_url,
:path => PaperclipAssetsController.config_path,
:styles => {
:grayscale => { :processors => [:grayscale] }
}
En lib:
module Paperclip
# Handles grayscale conversion of images that are uploaded.
class Grayscale < Processor
def initialize file, options = {}, attachment = nil
super
@format = File.extname(@file.path)
@basename = File.basename(@file.path, @format)
end
def make
src = @file
dst = Tempfile.new([@basename, @format])
dst.binmode
begin
parameters = []
parameters << ":source"
parameters << "-colorspace Gray"
parameters << ":dest"
parameters = parameters.flatten.compact.join(" ").strip.squeeze(" ")
success = Paperclip.run("convert", parameters, :source => "#{File.expand_path(src.path)}[0]", :dest => File.expand_path(dst.path))
rescue PaperclipCommandLineError => e
raise PaperclipError, "There was an error during the grayscale conversion for #{@basename}" if @whiny
end
dst
end
end
end
Esto podría no ser 100% necesario para una simple conversión en escala de grises, ¡pero funciona!
Rails 5, Paperclip 5 update
En lugar de tener que agregar una biblioteca ahora, puede llamar al comando de conversión de ImageMagick en el sistema para usar su opción de escala de grises . Puedes hacer lo mismo para el desenfoque o cualquiera de las otras opciones de ImageMagick, pero necesitaba hacer esto para la conversión a escala de grises.
En su modelo (cliente que tiene un logo):
class Client < ApplicationRecord
has_attached_file :logo,
styles: { thumb: "243x243#", grayscale: "243x243#" }
# ensure it''s an image
validates_attachment_content_type :logo, content_type: //Aimage//.*/z/
# optional, just for name and url to be required
validates :name, presence: true
validates :url, presence: true
after_save :convert_grayscale
def convert_grayscale
system "convert #{self.logo.path(:thumb)} -grayscale Rec709Luminance #{self.logo.path(:grayscale)}"
end
def logo_attached?
self.logo.file?
end
end
Luego, solo use en la vista como esta (según Paperclips github docs ).
En su opinión:
<%= image_tag(client.logo.url(:grayscale), class: ''thumbnail'', alt: client.name, title: client.name) %>
o con un enlace si lo prefiere:
<%= link_to(image_tag(client.logo.url(:grayscale), class: ''thumbnail'', alt: client.name, title: client.name), client.url ) %>