imagecopyresampled在php - 预乘alpha问题

时间:2012-02-24 14:58:03

标签: php image-processing alpha-transparency gd2 premultiplied-alpha

对于使用Alpha值的缓冲区,imagecopyresampled存在问题。显然,算法在过滤之前预先计算像素α值,这导致黑色边界围绕对象。

重现的步骤:

  • 在RGB部分拍摄一张完全为白色的图像,并且在Alpha部分的黑色背景上有一个(抗锯齿!!)白色圆圈(带圆圈,不带方形!)(所以alpha部分将主要具有全白色和全黑像素,以及由于抗锯齿而在圆的边界上的一些渐变像素 - 这意味着输入图像不是预乘的 - 它是直的/无法匹配的,因为图像的RGB部分完全是白色的。)

  • 使用imagecopyresampled将图像缩小一半

  • 在完全白色的图像上撰写结果

我期待的是什么: 完全白色的图像

我得到了什么: 圆圈轮廓周围的灰色边框

我很确定这是由于缩放算法中的预乘alpha(算法将像素alpha值与其rgb值相乘以计算新的rgb值 - 因此白色像素将变为灰色)

有没有人知道这方面的工作原理?

1 个答案:

答案 0 :(得分:0)

我建议尝试使用图像magick for php。

<击> http://www.php.net/manual/en/imagick.resizeimage.php

http://www.php.net/manual/en/imagick.scaleimage.php

根据我的经验,关于在PHP中成像的所有麻烦都会消失。