PHP Imagick 检测透明度

10

我希望能够使用Imagick PHP扩展来检测图像是否透明。

到目前为止,我唯一遇到的问题是运行exec() /其他命令,并使用ImageMagick命令行工具来实现这一点。这就是我的意思:

exec("identify -verbose example_transparent_image.png | grep \"Alpha\"", $output);
$is_transparent = !empty($output) ? true : false;

这个逻辑很简单。对于待检测的图像进行详细检查:如果输出包含任何alpha信息,那就意味着它使用了透明度。

似乎PHP imagick扩展应该有一个命令可以实现此功能,但缺乏文档让我很苦恼。每次都运行这种检查好像有点儿傻。

3个回答

10

3
我曾经遇到过完全相同的问题,尝试过identifyimage和getimagealphachannel两种方法。其中,identifyimage无法提供足够的信息,而getimagealphachannel则正常工作。理论上,getImageAlphaChannel()提供了ALPHACHANNEL常量,但在这方面的文档实在是糟糕无比。对于JPG图像,我得到了0的值;对于带有alpha通道的PNG图像,我得到了1的值;对于不带alpha通道的32位图像,我得到了0的值。总之,这些结果和我预期的一致。虽然这个问题已经存在了10个月,但我认为添加我的意见还是值得的。 - John Green

0

这是关于什么的?

substr((new Imagick($FILE))->identifyImage()['type'], 0, -5) == 'Alpha'

请查看identifyImage的文档。您会注意到函数输出的文档缺失。它只是一个解析版本。

identify -verbose $FILE (from the imagick package)

type 表示图像的类型(请参见 source)。您可以看到 imagick 返回一些 MagickTypeOptions 数组中的值,该数组在 here 中定义。如果图像的调色板包含 alpha 通道,则此数组为每种图像类型提供了一个 -Alpha-Matte 版本。

理论上,您可以使用此类调色板保存图像而不使用它,但在这种情况下,每个合理的程序都应切换到非 alpha 版本。但是,假阳性可能会发生,但应该很少见。

此外,我不会检查-Matte图像类型,因为该数组的定义方式是对于每个图像类型常量,都有两个具有不同名称的条目(-Alpha-Matte),但是由于-Alpha首先出现,因此将返回该名称用于该图像类型。

请您能否添加一些解释,例如链接到文档?谢谢。 - David Ferenczy Rogožan


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接