【发布时间】:2012-02-24 14:58:03
【问题描述】:
我对使用 alpha 值的缓冲区的 imagecopyresampled 有疑问。显然,该算法在过滤之前预乘了像素的 alpha 值,这会导致对象周围出现黑色边框。
重现步骤:
拍摄一张在 RGB 部分完全为白色的图像,并且在 Alpha 部分的黑色背景上有一个(抗锯齿!!)白色圆圈(使用圆圈,而不是正方形!) alpha 部分将具有大部分全白和全黑像素,以及由于抗锯齿在圆的边界上的一些渐变像素 - 这意味着输入图像没有预乘 - 它是直的/无抠图的,因为图像的 RGB 部分完全是白色的)。
使用 imagecopyresampled 将图像缩小一半
在全白图像上合成结果
我的期望: 全白图像
我得到了什么: 圆圈的轮廓周围有一个灰色的边框
我很确定这是由于缩小算法中的预乘 alpha(该算法将像素 alpha 值与其 rgb 值相乘以计算新的 rgb 值 - 因此白色像素将变为灰色)
有人知道这个的解决方法吗?
【问题讨论】:
标签: php image-processing alpha-transparency gd2 premultiplied-alpha