本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

将透明 png 加载到 gd php 中,但不要使其背景透明

发布于2024-11-26 12:27     阅读(1034)     评论(0)     点赞(7)     收藏(0)


我正在尝试从 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);

这是该代码的输出:https://i.sstatic.net/LvDZF.png这是将图像加载到接受 alpha 通道的程序中时的样子:https://i.sstatic.net/2SbLP.png

有人知道我将如何实现我的尝试吗?

感谢您的时间。

编辑

为了解释我想要什么,这里是另一张图片。上面的图片是我目前得到的,下面的图片是我想要的。我只是想加载一个透明的 PNG,它可以放在不同颜色的背景上。然而,我要么得到它像这里显示的那样(透明背景),要么得到黑色背景(因为我猜 alpha 通道没有被查看?)。希望这有帮助。图片:上面有错误,下面是我想要的模拟版本。

编辑2

根据下面的评论,我将其从 imagecreate() 更改为 imagecreatetruecolor(),现在它工作正常!如果有人有时间,我很想解释一下为什么这可以解决这个问题,但现在,感谢所有发表评论或花时间研究这个问题的人。


解决方案


我怀疑您imagecreate()可能会遇到问题,因为它创建的调色板图像不具备真彩色图像的灵活性或表达广度。

我建议您将其替换为imagecreatetruecolor()



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.phpheidong.com/blog/article/554912/d9c5e0e4e50e69f9b0f3/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

7 0
收藏该文
已收藏

评论内容:(最多支持255个字符)