2010-12-14 73 views
20

J'ai récemment mis en œuvre Paperclip with Rails et je souhaite essayer certaines des options de filtre d'ImageMagick telles que blur. Je n'ai pas été capable de trouver des exemples de comment faire cela. Est-ce que ça passe par: le style comme une autre option?Rails Paperclip comment utiliser les options de filtre d'ImageMagick?

:styles => { :medium => "300x300#", :thumb => "100x100#" } 

@ réponse de plang était correct, mais je voulais donner la solution exacte à quelqu'un flou, juste au cas où cherchait et a trouvé cette question:

:convert_options => { :all => "-blur 0x8" } 
// -blur {radius}x{sigma} 

qui a changé ceci:
alt text

à ceci:
alt text

Répondre

13

Je n'ai pas testé, mais vous devriez être en mesure d'utiliser le paramètre « CONVERT_OPTIONS », comme ceci:

:convert_options => { :all => ‘-colorspace Gray’ } 

Jetez un oeil à https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/thumbnail.rb

J'utilise personnellement mon propre processeur.

Model:

has_attached_file :logo, 
        :url => PaperclipAssetsController.config_url, 
        :path => PaperclipAssetsController.config_path, 
        :styles => { 
           :grayscale => { :processors => [:grayscale] } 
           } 

Dans 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 

Cela pourrait ne pas être 100% nécessaire pour une simple conversion en niveaux de gris, mais ça marche!

+2

Désolé pour le retard, merci pour la grande réponse! – jyoseph

+4

Bien sent comme il est wayyy plus facile d'ajouter dans les options de conversion ': styles => {: gray =>" 450x250 "},: convert_options => {: gray =>" -blur 0x8 "}' – Ben

0

Rails 5, 5 Paperclip mise à jour

Au lieu d'avoir à ajouter une bibliothèque maintenant, vous pouvez simplement appeler à ImageMagick's convert command sur le système d'utiliser son grayscale option. Vous pouvez faire la même chose pour le flou ou l'une des autres options ImageMagick, mais je devais le faire pour la conversion en niveaux de gris.

Dans votre modèle (client qui a 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 

Ensuite, il suffit d'utiliser la vue comme celui-ci (par Paperclips github docs).

À votre avis:

<%= image_tag(client.logo.url(:grayscale), class: 'thumbnail', alt: client.name, title: client.name) %> 

ou avec un lien si vous préférez:

<%= link_to(image_tag(client.logo.url(:grayscale), class: 'thumbnail', alt: client.name, title: client.name), client.url) %>