对于使用Alpha值的缓冲区,imagecopyresampled存在问题。显然,算法在过滤之前预先计算像素α值,这导致黑色边界围绕对象。
重现的步骤:
在RGB部分拍摄一张完全为白色的图像,并且在Alpha部分的黑色背景上有一个(抗锯齿!!)白色圆圈(带圆圈,不带方形!)(所以alpha部分将主要具有全白色和全黑像素,以及由于抗锯齿而在圆的边界上的一些渐变像素 - 这意味着输入图像不是预乘的 - 它是直的/无法匹配的,因为图像的RGB部分完全是白色的。)
使用imagecopyresampled将图像缩小一半
在完全白色的图像上撰写结果
我期待的是什么: 完全白色的图像
我得到了什么: 圆圈轮廓周围的灰色边框
我很确定这是由于缩放算法中的预乘alpha(算法将像素alpha值与其rgb值相乘以计算新的rgb值 - 因此白色像素将变为灰色)
有没有人知道这方面的工作原理?
答案 0 :(得分:0)
我建议尝试使用图像magick for php。
<击> http://www.php.net/manual/en/imagick.resizeimage.php 击>
http://www.php.net/manual/en/imagick.scaleimage.php
根据我的经验,关于在PHP中成像的所有麻烦都会消失。