Perl GD 检查像素是不是透明

Posted

技术标签:

【中文标题】Perl GD 检查像素是不是透明【英文标题】:Perl GD Check If Pixel is TransparentPerl GD 检查像素是否透明 【发布时间】:2014-08-04 14:27:00 【问题描述】:

我一直在尝试解决这个问题。我必须检查给定的像素(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);

【问题讨论】:

【参考方案1】:

我找到了一个似乎可以正常工作的解决方案:

my $index = $myImage->getPixel($x,y); 

将返回一个调色板。调色板的范围取决于打开图像的模式。如果是真彩色(24 位 RGB-16,777,216 色),这是人眼可识别的最大颜色数量和实际使用的最大颜色,则最大调色板编号为 16,777,215。当在“透明”像素上调用该函数时,返回的数字超过 20 亿,这对于 24 位 RGB 颜色来说是一个无效数字。所以一个简单的检查:

if ($index >= 1<<24) 
    #The pixel is transparent

为我做了诀窍。

【讨论】:

以上是关于Perl GD 检查像素是不是透明的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Perl 和 GD 创建透明的真彩色 PNG?

PHP GD从创建的PNG修剪透明像素

如何检查图像的特定像素是不是透明?

PHP中带有GD的透明背景

使用 GD 的背景图像透明度

如何在 PHP 中使用 GD 设置透明背景?