Rails Paperclip, как использовать параметры фильтра ImageMagick? - PullRequest
20 голосов
/ 14 декабря 2010

Я недавно внедрил Paperclip с Rails и хочу попробовать некоторые параметры фильтра из ImageMagick, такие как blur .Я не смог найти ни одного примера, как это сделать.Проходит ли это через: стиль как другой вариант?

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

@ планг ответ был правильным, но я хотел дать точное решение для размытия, на тот случай, если кто-то искал и нашел этот вопрос:

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

Что изменило это:
alt text

На это:
alt text

Ответы [ 2 ]

13 голосов
/ 14 декабря 2010

Я не проверял это, но вы должны иметь возможность использовать параметр "convert_options", например:

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

Посмотрите на https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/thumbnail.rb

Я лично использую свой собственный процессор.

В модели:

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

В 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

Возможно, это не на 100% необходимо для простого преобразования в градациях серого, но это работает!

0 голосов
/ 13 декабря 2016

Rails 5, обновление Paperclip 5

Вместо того, чтобы добавлять библиотеку сейчас, вы можете просто вызвать команду преобразования ImageMagick в системе для использованияего опция оттенков серого .Вы можете сделать то же самое для размытия или любого другого параметра ImageMagick, но мне нужно было сделать это для преобразования в оттенки серого.

В вашей модели (клиент с логотипом):

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

Тогда просто используйте в представлении, как это (для Paperclips github docs ).

По вашему мнению:

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

или со ссылкой, если вы предпочитаете:

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