Подтвердить что ты не робот

Rails Paperclip как использовать параметры фильтра ImageMagick?

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

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

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

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

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

К этому:
alt text

4b9b3361

Ответ 1

Я не тестировал это, но вы должны иметь возможность использовать параметр "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% необходимо для простого преобразования оттенков серого, но оно работает!

Ответ 2

Рельсы 5, обновление скрепления 5

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

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

class Client < ApplicationRecord
  has_attached_file :logo,
                    styles: { thumb: "243x243#", grayscale: "243x243#" }
  # ensure it 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

Затем просто используйте в виде, подобном этому (за Папки с документами github).

На ваш взгляд:

<%= 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 ) %>