0

对于使用 alpha 值的缓冲区,我对 imagecopyresampled 有疑问。显然,该算法在过滤之前预乘了像素的 alpha 值,这会导致对象周围出现黑色边框。

重现步骤:

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

  • 使用 imagecopyresampled 将图像缩小一半

  • 在全白图像上合成结果

我所期望的:完全白色的图像

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

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

有谁知道这个的workarround?

4

1 回答 1

0

我建议尝试使用 php 的 image magick。

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

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

以我的经验,所有关于 php 成像的麻烦都会消失。

于 2012-02-24T15:18:54.717 回答