客户端.rb
has_attached_file :avatar,
:path => ":rails_root/public/system/:attachment/:id/:style/:filename",
:url => "/system/:attachment/:id/:style/:filename",
:styles => {:thumb => "144x144#", :grayscale => { :processors => [:grayscale] }}
拇指版效果很好,图像被裁剪到所需的大小,灰度只将该图像转换为灰度,但图像没有被裁剪,这是我在 StackOverflow 上找到的灰度生成器:
库/灰度.rb
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
要将图像转换为灰度,一些参数将被发送到数组中的 imagemagick,问题是 - 我必须将哪些参数发送到 imagemagick,这样它才能完全"144x144#"
执行回形针中的操作。
我尝试跟踪日志以查看"144x144#"
日志中的内容,它看起来像这样:-crop '144x144+30+0'
,我尝试在我的生成器中使用它并将其作为参数发送,例如:
parameters = []
parameters << ":source"
parameters << "-crop '144x144+30+0'"
parameters << "-colorspace Gray"
parameters << ":dest"
如果我使用我之前上传的同一张图片,看起来它可以工作,如果我上传另一张图片,则图像被完全错误地裁剪。所以我得出一个结论:-crop '144x144+30+0'
由回形针生成的参数是针对特定图像大小的,而对于另一个具有不同大小的图像,通常会发送不同的参数以适应 144 像素。
如何裁剪生成器中的图像以适应144x144#
回形针中的等价物,或者我需要发送到 imagemagick 以实现此目的的参数是什么。谢谢你。