用载波裁剪透明像素
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 预计。
在 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 预计。