2017-10-20 204 views
0

在MiniMagick的Ruby 5上使用Carrierwave,是否可以修剪透明像素?用载波来裁剪透明像素

假设用户上传500x500图像,但只有内部250x250像素确实被填充,剩下的是透明的。是否有一个处理命令可以帮助在额外处理之前检测并修剪图像为250x250?

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

回答

1

MiniMagick::Image.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") 

修剪

rose_output.png

测试透明图像的预期。

trim_output.png