ImageMagick在背景图片上调整大小

时间:2014-11-20 16:28:35

标签: image-processing imagemagick paperclip imagemagick-convert

我需要在PaperClip中调整图像大小,后者在背景图像上使用ImageMagick。我制作了自定义PaperClip处理器(https://gist.github.com/xxx/1051938https://github.com/thoughtbot/paperclip#custom-attachment-processors)并且它们正在工作,但我不知道用于构成图像的命令。

这是我想要的过程:

  1. 用户上传图片X

  2. 处理器运行并将图像X的大小调整为给定尺寸并使用透明填充 - Y

  3. 接下来,背景图像被裁剪为给定尺寸 - Z

  4. Y覆盖在Z居中。

  5. 谢谢!

1 个答案:

答案 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