无论如何,我是否使用rmagick在图像中检测透明像素



我正在使用rmagick为iOS生成图标。为此,我需要删除透明度。目前,我正在停用Alpha通道并使所有图像变平。这是我为此使用的代码。

app_store_icon = ImageList.new(app_store_icon_url)
app_store_icon.alpha(DeactivateAlphaChannel)
app_store_icon.flatten_images

但是,如果用户在没有透明度的情况下上传适当的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。

如果以这种方式可以使用:将图像复合到图像大小的白色背景。例如,给定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")

寻找rmagick常数。

最新更新