PHP合并透明图背景为黑色时候的处理
情况这样,左边的图片是使用php磨圆后的图片,然后与白色背景的图片合并之后,透明部分奇怪的变成了黑色。
最初的代码,简单的合并
//背景图片
$bgPath= './resource/bg.png';
$bgImage= imagecreatefrompng($bgPath);
//透明图片
$desPath = './resource/avator.png';
$desImage = imagecreatefrompng($desPath);
//创建图像
$imagebox = imagecreatetruecolor(imagesx($bgImage),imagesy($bgImage));
imagecopyresampled($imagebox, $bgImage, 0, 0, 0, 0, imagesx($bgImage), imagesy($bgImage), imagesx($bgImage), imagesy($bgImage));
//----合并透明图片----
imagecopymerge($imagebox, $desImage, 20, 0, 0, 0, imagesx($desImage), imagesy($desImage), 100);
$filename = './images/'.uniqid().'.jpg';
imagejpeg($imagebox,$filename);
imagedestroy($imagebox);
第一种方式
使用 imagecopy 合并
这里既是直接把 imagecopymerge($imagebox, $desImage, 20, 0, 0, 0, imagesx($desImage), imagesy($desImage), 100); 这段代码替换成 imagecopy($imagebox, $desImage, 20, 0, 0, 0, imagesx($desImage), imagesy($desImage));
第二种方式
如果需要使用 imagecopymerge 合并 ,还是把那段代码替换成如下代码,测试能够正常工作
$x = imagesx($desImage);
$y = imagesy($desImage);
$newDes = imagecreatetruecolor($x, $y);
$color = imagecolorallocate($newDes,255,255,255);
imagecolortransparent($newDes,$color);
imagefill($newDes,0,0,$color);
imagecopy($newDes, $desImage, 0, 0, 0, 0,$x, $y);
imagecopymerge($imagebox, $newDes, 20, 0, 0, 0, $x, $y, 100);
一顿操作之后
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现