在Ruby 5和MiniMagick上使用Carrierwave,是否可以修剪透明像素?
假设用户上传了500x500图像,但确实只填充了内部250x250像素,其余部分是透明的。是否有一个处理命令可以帮助在额外处理之前检测并修剪图像到250x250?
我发现https://www.imagemagick.org/discourse-server/viewtopic.php?t=12127并且似乎在Imagemagick上有一个trim transparent
命令,但我不确定如何在Ruby包装器Minimagick中使用它?
答案 0 :(得分:1)
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")
修剪预期。