我尝试从GD中的动态文本数据创建图像,并在顶角放置徽标。图像的背景颜色将根据传入的数据而变化,因此我无法将徽标另存为没有Alpha通道的图像。
我创建图像,使用imagefill()填充动态背景颜色,然后使用imagettftext()添加文本,然后加载我的徽标。我在将徽标放入图像时遇到问题它保持透明的背景颜色。所以我希望它背后的动态背景颜色是用imagefill()设置的。但是,它保持了加载的透明度背景,因此将png的这一部分写为透明。我在加载后尝试在徽标上调用imagefill()(使用设置目标图像背景的相同rgb),但这并没有做任何事情。
以下是我的代码:
$background = $_GET['background'];
$data1 = $_GET['data1'];
$data2 = $_GET['data2'];
$r = $_GET['r'];
$g = $_GET['g'];
$b = $_GET['b'];
$png_image = imagecreate(400, 200);
$gd_text_color = imagecolorallocate($png_image, 255, 255, 255);
$gd_background_color = imagecolorallocate($png_image, $r, $g, $b);
imagefill($png_image, 0, 0, $gd_background);
$text1 = "test test $data1";
$text2 = "test test again $data2";
$font = 'Lato-regular.ttf';
imagettftext($png_image, 18, 0, 20, 20, $gd_text_color, $font, $text1);
imagettftext($png_image, 18, 0, 20, 50, $gd_text_color, $font, $text2);
//trying to get this logo and place it in the corner.
$logo = imagecreatefrompng("images/logo.png");
imagecopy($png_image, $logo, 10, 10, 0, 0, 100, 30);
header('Content-type: image/png');
imagepng($png_image, $filename);
imagedestroy($png_image);
以下是该代码的输出:http://i.imgur.com/n25h9Js.png 以下是加载到接受Alpha通道的程序时图像的样子:http://i.imgur.com/3OIRupN.png
有谁知道我如何实现我的尝试?
感谢您的时间。
修改
尝试在这里解释我想要的另一张图片。顶部图像是我目前得到的,底部图像是我想要的。我只是想加载一个可以放在不同颜色背景上的透明PNG。但是,我要么像它在这里显示的那样(透明背景)还是黑色背景(因为我猜这个alpha通道不被人看?)。希望这可以帮助。图片:
修改2
根据下面的评论,我将它从imagecreate()更改为imagecreatetruecolor(),现在它工作正常!我想要解释为什么如果有人有时间这就解决了它,但是现在,感谢所有评论或甚至花时间看这个问题的人。
答案 0 :(得分:0)
我怀疑你的imagecreate()
可能会给你造成问题,因为它会创建一个没有真彩色图像灵活性或广泛表现的图像。
我建议您将其替换为imagecreatetruecolor()
。