我一直试图解决这个问题。我必须检查给定像素(x,y)是否完全透明。
1.如何从给定像素中提取alpha通道?拥有127的alpha通道意味着像素是透明的? 2.我在透明像素上测试了以下代码,它产生了一种非常暗(几乎是黑色)颜色的RGB组合。我可以用它作为指标,但我需要更准确的方法。
my $myImage = newFromPng GD::Image($path);
$myImage->saveAlpha(1);
my $index = $myImage->getPixel($x,$y);
my ($red,$green,$blue) = $myImage->rgb($index);
答案 0 :(得分:2)
我找到了一个似乎正常运行的解决方案:
my $index = $myImage->getPixel($x,y);
将返回调色板。调色板的范围取决于模式,图像打开。如果是TrueColor(24位RGB-16,777,216色),这是人眼可识别的最大颜色数量和实际使用的最大颜色,最大值调色板编号为16,777,215。当在“透明”像素上调用该函数时,返回的数字超过20亿,这对于24位RGB颜色是无效数字。所以一个简单的检查:
if ($index >= 1<<24) {
#The pixel is transparent
}
为我做了诀窍。