用载波裁剪透明像素

Cropping transparent pixels with carrierwave

在 Ruby 5 上使用 Carrierwave 和 MiniMagick,是否可以 trim 透明像素?

假设用户上传一张500x500的图片,但确实只有内部250x250像素被填充,其余部分是透明的。是否有处理命令可以帮助检测图像并将其 trim 调整为 250x250,然后再进行额外处理?

我发现 https://www.imagemagick.org/discourse-server/viewtopic.php?t=12127 Imagemagick 上似乎有一个 trim transparent 命令,但我不确定如何将它与 Ruby 包装器 Minimagick 一起使用?

MiniMagick::Image.trim 是所有需要的。如果没有像素迭代器,最简单的方法是将 trim 应用于克隆图像,然后对最小结果进行操作。

require 'mini_magick'

def trimed_image(path)
  image = MiniMagick::Image.open(path)
  test_image = image.clone
  test_image.trim
  if test_image.width < image.width || test_image.height < image.height
    test_image
  else
    image
  end
end

测试用例convert rose: -resize x100 rose.png

rose = trimed_image("rose.png")
rose.write("rose_output.png")

预计不会有任何变化。

convert -size 100x100 gradient: -background black -extent 200x200-50-50 -alpha copy trim.png

测试透明图片
trim = trimed_image("trim.png")
trim.write("trim_output.png")

Trim 预计。