我知道PHP+GDTransparency问题在这个网站和许多其他网站上已经被打得死去活来,但我已经遵循了所有的建议,我似乎无法解决我的问题。
首先,解释:
我正在尝试将一个图像叠加在另一个图像上。它们都有透明的区域。作为一个我知道应该看起来很特别的演示,我试图在我创建的蓝色箭头形状的顶部覆盖一个复选标记。
以下是两张图片:
现在转到我的代码:
我正在使用一个库/API,它是我为减轻使用PHP+GD编辑图像的痛苦而构建的。它仍处于初级阶段,但相关文件如下:
The Base Class
The Main Loader
The (poorly named) Combine Class
我正在使用以下脚本运行代码:
<?php
require_once( Image.php );
header("Content-Type: image/png");
$img = new Image();
$over = new Image();
$img->source = "arrow.png";
$over->source = "chk-done_24.png";
$img->Combine->Overlay($over, 20, 20, 0, 0, $over->width, $over->height);
$img->output();
$img->clean();
unset($img);
?>
我希望输出如下:
但我得到的却是:
如果填充区域是白色或黑色,我会完全理解这个问题,但用蓝色填充对我来说没有任何意义。
在上面链接的Combine Class I中,我也尝试过imagecopy,imagecopyreseampled和香草imagecopymerge,两者的结果相似。
我完全不知所措。
Edit:
需要明确的是,我的问题是:我的代码的哪一部分不正确?为什么它用颜色(而不是黑色或白色)填充透明区域?我如何在保持透明图像合并能力的同时修复它?
Update:
请注意,创建新的Image对象时,它会调用newImage
,其中包含以下代码:
$this->handle = imagecreatetruecolor($this->width, $this->height);
imagealphablending($this->handle, false);
imagesavealpha($this->handle, true);
我觉得这可能很容易错过。