在开发颜色提取器时,我偶然发现了带有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
可以调整/反转,以我们以流行的颜色格式/规格期望。都是上下文!