PHP GD库调用rotatePreserve后partialEye分配颜色全透明问题
问题根因
- 核心故障来自
partialEye函数中创建图像使用的是imagecreate()方法:该方法生成的是基于256色调色板的索引图像,对透明alpha通道的支持能力极弱,且可存储的颜色数量有限。 - 当你先调用
rotatePreserve()后,传入partialEye的源图像是rotatePreserve内部用imagecreatetruecolor()创建的真彩色图像,将真彩色图像内容拷贝到调色板图像时,会占满256色调色板空间,后续调用imagecolorallocate分配的颜色无法被正常加入调色板,被错误映射为透明色。
修复方案
只需要修改partialEye函数的图像创建代码即可:
将原来的
$part_eye = imagecreate($x, $y);
替换为:
$part_eye = imagecreatetruecolor($x, $y);
同时建议额外补充保存alpha通道的配置,避免后续输出透明异常,在imagealphablending($part_eye, true);代码后加一行:
imagesavealpha($part_eye, true);
其他非致命问题说明
两个函数中return语句后的imagedestroy代码永远不会执行,属于无效代码,可以删除或者调整到return之前执行,避免内存泄漏。
内容的提问来源于stack exchange,提问作者TwistedT
相关产品推荐
相关产品推荐

