我知道 PHP+GD 透明度问题在这个网站和许多其他网站上已经被彻底解决,但我已经遵循了所有建议,但似乎无法解决我的问题。
一、说明:
我正在尝试将一张图像叠加在另一张图像之上。它们都有透明的区域。作为一个我知道应该以特定方式呈现的演示,我尝试在我创建的蓝色箭头形状的顶部覆盖一个复选标记。
这是两张图片:
![check mark](https://i.stack.imgur.com/3C2Er.png)
![blue arrow](https://i.stack.imgur.com/mblTv.png)
现在我的代码:
我正在使用我构建的一个库/API,以减轻使用 PHP+GD 编辑图像的痛苦。它仍处于起步阶段,但相关文件是:
基类
主装载机
(名字不好听的)组合类
我正在使用以下脚本运行代码:
<?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);
?>
我期望输出是这样的:
![Combined images](https://i.stack.imgur.com/YrwX1.png)
但我得到的是这个:
![Square bottom](https://i.stack.imgur.com/RNfYc.png)
我完全理解这个问题如果填充区域是白色或黑色,但填充蓝色对我来说没有任何意义。
在我上面链接的组合类中,我也尝试过图像复制, 图像复制重采样和香草图像复制合并,两者都有相似的结果。
我完全不知所措。
Edit:
需要明确的是,我的问题是:我的代码的哪一部分不正确?为什么它用颜色(而不是黑色或白色)填充透明区域?如何修复它,同时仍然保持将图像与透明度合并的能力?
Update:
请注意,当创建新的 Image 对象时,它会调用newImage
其中包含以下代码:
$this->handle = imagecreatetruecolor($this->width, $this->height);
imagealphablending($this->handle, false);
imagesavealpha($this->handle, true);
我觉得这可能很容易被错过。