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

问题描述 投票:0回答:2

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

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

但是,如果用户上传没有透明度的正确png图像,我想避免这些不必要的步骤。那么如何检查图像中是否有任何透明度并仅在需要时执行上述操作?

ruby-on-rails ruby imagemagick rmagick
2个回答
0
投票

如果这种方式适合您,请尝试:将图像合成图像大小的白色背景。例如,给定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 constants


0
投票

在命令行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。

© www.soinside.com 2019 - 2024. All rights reserved.