Imagick Alpha vs不透明度



在开发颜色提取器时,我偶然发现了带有Imagick的怪癖。我用单个黑色透明像素图像确认了问题。在gimp下,该黑色显示为75%不透明,所以我想它的alpha/透明度为25%。

当我运行 getColorValue(Imagick::COLOR_OPACITY)时,我大约获得0.25,而我的 getColorValue(Imagick::COLOR_ALPHA)获得约0.75,因此与我的期望完全相反。

这是关于Imagick的问题(我正在使用PHP-Imagick 3.4.3-1和Imagemagick 6.9.7-9),还是我是不透明度和透明度的概念?

不是怪癖,而是设计。在大多数情况下,不透明&Alpha共享相同的数据通道,图像格式/编码器的上下文实现了正确的值。我强调上下文是关键。

这是关于Imagick [..]的一个问题,还是我是不颠覆性和透明度的概念?

让我们看一下两者的实现。

pixelgetopacityquantum

return(ClampToQuantum(wand->pixel.opacity));

pixelgetalphaquantum

return(QuantumRange-ClampToQuantum(wand->pixel.opacity));

您可以看到,两者都返回了在0和 Quantum limit之间绑定的相同数据。

PixelGetOpacityQuantum返回确切的数据值,但是PixelGetAlphaQuantum可以调整/反转,以我们以流行的颜色格式/规格期望。都是上下文!

最新更新