我需要在PaperClip中调整图像大小,后者在背景图像上使用ImageMagick。我制作了自定义PaperClip处理器(https://gist.github.com/xxx/1051938和https://github.com/thoughtbot/paperclip#custom-attachment-processors)并且它们正在工作,但我不知道用于构成图像的命令。
这是我想要的过程:
用户上传图片X
处理器运行并将图像X的大小调整为给定尺寸并使用透明填充 - Y
接下来,背景图像被裁剪为给定尺寸 - Z
Y覆盖在Z居中。
谢谢!
答案 0 :(得分:0)
经过几天的挣扎,答案就在这里:
对于IM命令行版本一步一步(输入a.png,tiles.png是背景源)
convert a.png -thumbnail 100x100 -background none -gravity center -extent 100x100 resized.png
convert tiled.png -crop 100x100+0+0 +repage cropped.png
convert cropped.png out.png -composite result.png
对于IM命令行组合代码
convert tiled.png -crop 1000x1000+0+0 +repage a.png -thumbnail 1000x1000 -background none -gravity center -extent 1000x1000 -composite result.png
用于图像magick复制默认缩略图处理器并更改make方法(或只创建自己的处理器)
def make
src = @file
dst = Tempfile.new([@basename, @format ? ".#{@format}" : ''])
dst.binmode
begin
tgeom = @target_geometry.width.to_s + 'x' + @target_geometry.height.to_s
tiled_path = Rails.root.join('public','system','tiled.png')
parameters = []
parameters << tiled_path
parameters << '-crop'
parameters << tgeom + '+0+0 +repage'
parameters << ':source'
parameters << '-thumbnail ' + tgeom
parameters << '-background none'
parameters << '-gravity center'
parameters << '-extent ' + tgeom
parameters << '-composite'
parameters << ':dest'
parameters = parameters.flatten.compact.join(' ').strip.squeeze(' ')
success = convert(parameters, :source => "#{File.expand_path(src.path)}#{'[0]' unless animated?}", :dest => File.expand_path(dst.path))
rescue Cocaine::ExitStatusError => e
raise Paperclip::Error, "There was an error processing the thumbnail for #{@basename}" if @whiny
rescue Cocaine::CommandNotFoundError => e
raise Paperclip::Errors::CommandNotFoundError.new("Could not run the `convert` command. Please install ImageMagick.")
end
dst
end