Client.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で見つけたグレースケールジェネレーターは次のとおりです。
lib/グレースケール.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"
以前にアップロードしたのと同じ画像を使用するとうまくいったように見えましたが、別の画像をアップロードすると、画像が完全に間違ってトリミングされます。したがって、ペーパークリップによって生成された param:-crop '144x144+30+0'
はその特定の画像サイズ用であり、通常、サイズが異なる別の param は 144px に収まるように送信されるという結論に達しました。
ジェネレーターで画像をトリミングして、144x144#
ペーパークリップと同等にするにはどうすればよいですか、またはこれを実現するために imagemagick に送信する必要があるパラメーターは何ですか。ありがとうございました。