我正在使用Rmagick为iOS生成图标。为此,我需要删除透明度。目前我正在停用Alpha通道并展平所有图像。这是我用于此的代码。
app_store_icon = ImageList.new(app_store_icon_url)
app_store_icon.alpha(DeactivateAlphaChannel)
app_store_icon.flatten_images
但是,如果用户上传没有透明度的正确png图像,我想避免这些不必要的步骤。那么如何检查图像中是否有任何透明度并仅在需要时执行上述操作?
如果这种方式适合您,请尝试:将图像合成图像大小的白色背景。例如,给定alpha通道图像img.png
:
require 'rmagick'
include Magick
image = Magick::Image.read("img.png").first
w = image.columns
h = image.rows
if image.alpha?
bg = Image.new(w,h) { self.background_color = "white" } # create a white background
image = bg.composite(image, NorthWestGravity, 0, 0, OverCompositeOp) # compose
end
image.write("img_out.png")
在命令行Imagemagick中,提取alpha通道并测试其平均值是否小于1.如果是,则它具有透明度。如果恰好是1,则没有透明度。
value=$(convert image -alpha extract -format "%[fx:mean]" info:)
or
value=$(convert image -alpha extract -scale 1x1! -format "%[fx:u]" info:)
if [ "$value" = 1 ]; then
echo "opaque"
else
echo "transparent"
fi
对不起,我不知道RMagick。