PHP 通过 GP插件在底图上添加多张图片 多段文字保存到本地

PHP实现图片加文字/图案水印 需求:在一张背景图上添加二维码(带不同),并且个人名字,联系方式和个人头像。思路:二维码和头像相当于往图片上添加图片,个人姓名和联系方式相当于玩图片上添加文字,这就是文字/图案水印了。思路就是上网百度!!历经辛苦,找到一篇看起来可能会明白,简洁,简短的文章:(http://www.jb51.net/article/44829.htm) //添加图片水印$dst_path = 'dst.jpg'; 阅读详情

如果你的需求是在一张地图上增加各种文字 图片  然后保存这种图片 那么直接拿下面的方法用吧 别客气  检查好PHP是否安装GP插件就行

​​​​​​​

public function index()
	{
		// 底图路径
		$backgroundImagePath = 'https://www.yunhebaoming.cn/uploads/shili/beijing.png';
		
		// 加载底图
		$backgroundImage = imagecreatefromjpeg($backgroundImagePath);
		
		// 获取底图的宽度和高度
		list($backgroundWidth, $backgroundHeight) = getimagesize($backgroundImagePath);
		
		// 头像
		$smallImage1Path = 'https://www.yunhebaoming.cn/uploads/shili/333(1).png';
		$smallImage1 = imagecreatefrompng($smallImage1Path);
		list($smallWidth1, $smallHeight1) = getimagesize($smallImage1Path);
		$destX1 = 760; // 设置第一张小图的位置
		$destY1 = 90;
		imagecopy($backgroundImage, $smallImage1, $destX1, $destY1, 0, 0, $smallWidth1, $smallHeight1);
		imagedestroy($smallImage1); // 释放资源
		
		
		// 盖章
		$smallImage2Path = 'https://www.yunhebaoming.cn/uploads/shili/zhang.png';
		$smallImage2 = imagecreatefrompng($smallImage2Path);
		list($smallWidth2, $smallHeight2) = getimagesize($smallImage2Path);
		$destX2 = 690; // 设置第二张小图的位置(例如,右下角)
		$destY2 = 330;
		imagecopy($backgroundImage, $smallImage2, $destX2, $destY2, 0, 0, $smallWidth2, $smallHeight2);
		imagedestroy($smallImage2); // 释放资源
		
		
		// 二维码
		$smallImage3Path = 'https://www.yunhebaoming.cn/uploads/shili/code.png';
		$smallImage3 = imagecreatefrompng($smallImage3Path);
		list($smallWidth3, $smallHeight3) = getimagesize($smallImage3Path);
		$destX3 = 836; // 设置第二张小图的位置(例如,右下角)
		$destY3 = 465;
		imagecopy($backgroundImage, $smallImage3, $destX3, $destY3, 0, 0, $smallWidth3, $smallHeight3);
		imagedestroy($smallImage3); // 释放资源
		
		
		//==========================================================================================================
		$fontPath = './uploads/20250213/simhei.ttf'; // 确保字体文件存在
		$fontPath2 = './uploads/20250213/simhei.ttf'; // 确保字体文件存在
		
		// 模版姓名
		$card_name = '姓    名:';
		$textColor1 = imagecolorallocate($backgroundImage, 0, 114, 185); // 白色
		$fontSize1 = 25;
		$textPosition1 = [60, 120]; // 设置第一段文字的位置
		imagettftext($backgroundImage, $fontSize1, 0, $textPosition1[0], $textPosition1[1], $textColor1, $fontPath, $card_name);
		
		// 模版性别
		$card_sex = '性    别:';
		$textColor2 = imagecolorallocate($backgroundImage, 0, 114, 185); // 黑色
		$fontSize2 = 25;
		$textPosition2 = [420, 120]; // 设置第二段文字的位置(例如,底部)
		imagettftext($backgroundImage, $fontSize2, 0, $textPosition2[0], $textPosition2[1], $textColor2, $fontPath, $card_sex);

		// 模版证号
		$card_num = '证    号:';
		$textColor1 = imagecolorallocate($backgroundImage, 0, 114, 185); // 白色
		$fontSize1 = 25;
		$textPosition1 = [60, 230]; // 设置第一段文字的位置
		imagettftext($backgroundImage, $fontSize1, 0, $textPosition1[0], $textPosition1[1], $textColor1, $fontPath, $card_num);

		// 添加第一段文字
		$card_type = '作业类别:';
		$textColor1 = imagecolorallocate($backgroundImage, 0, 114, 185); // 白色
		$fontSize1 = 25;
		$textPosition1 = [60, 340]; // 设置第一段文字的位置
		imagettftext($backgroundImage, $fontSize1, 0, $textPosition1[0], $textPosition1[1], $textColor1, $fontPath, $card_type);

		// 模版发证单位
		$card_unit = '发证单位:';
		$textColor1 = imagecolorallocate($backgroundImage, 0, 114, 185); // 白色
		$fontSize1 = 25;
		$textPosition1 = [60, 450]; // 设置第一段文字的位置
		imagettftext($backgroundImage, $fontSize1, 0, $textPosition1[0], $textPosition1[1], $textColor1, $fontPath, $card_unit);

		// 模版有效期限
		$card_time = '有效期限:';
		$textColor1 = imagecolorallocate($backgroundImage, 0, 114, 185); // 白色
		$fontSize1 = 25;
		$textPosition1 = [60, 550]; // 设置第一段文字的位置
		imagettftext($backgroundImage, $fontSize1, 0, $textPosition1[0], $textPosition1[1], $textColor1, $fontPath, $card_time);
		
		//========================================================================================================
		
		
		
		//正式动态内容
		// 模版姓名
		$name = '张三呀';
		$textColor1 = imagecolorallocate($backgroundImage, 0, 0, 0);
		$fontSize1 = 27;
		$textPosition1 = [205, 122]; // 设置第一段文字的位置
		imagettftext($backgroundImage, $fontSize1, 0, $textPosition1[0], $textPosition1[1], $textColor1, $fontPath2, $name);
		
		// 模版性别
		$sex = '男';
		$textColor2 = imagecolorallocate($backgroundImage, 0, 0, 0);
		$fontSize2 = 27;
		$textPosition2 = [570, 122]; // 设置第二段文字的位置(例如,底部)
		imagettftext($backgroundImage, $fontSize2, 0, $textPosition2[0], $textPosition2[1], $textColor2, $fontPath2, $sex);

		// 模版证号
		$num = '123456789098765432';
		$textColor1 = imagecolorallocate($backgroundImage, 0, 0, 0);
		$fontSize1 = 27;
		$textPosition1 = [205, 231]; // 设置第一段文字的位置
		imagettftext($backgroundImage, $fontSize1, 0, $textPosition1[0], $textPosition1[1], $textColor1, $fontPath2, $num);

		// 添加第一段文字
		$type = '生产经营单位安全生产管理人员';
		$textColor1 = imagecolorallocate($backgroundImage, 0, 0, 0);
		$fontSize1 = 27;
		$textPosition1 = [205, 341]; // 设置第一段文字的位置
		imagettftext($backgroundImage, $fontSize1, 0, $textPosition1[0], $textPosition1[1], $textColor1, $fontPath2, $type);

		// 模版发证单位
		$unit = '上海浦东新区云和特种作业安全培训中心';
		$textColor1 = imagecolorallocate($backgroundImage, 0, 0, 0);
		$fontSize1 = 27;
		$textPosition1 = [205, 451]; // 设置第一段文字的位置
		imagettftext($backgroundImage, $fontSize1, 0, $textPosition1[0], $textPosition1[1], $textColor1, $fontPath2, $unit);

		// 模版有效期限
		$time = '2023/02/03  至  2028/03/08';
		$textColor1 = imagecolorallocate($backgroundImage, 0, 0, 0);
		$fontSize1 = 27;
		$textPosition1 = [205, 551]; // 设置第一段文字的位置
		imagettftext($backgroundImage, $fontSize1, 0, $textPosition1[0], $textPosition1[1], $textColor1, $fontPath2, $time);
		
		
//		 保存最终图像到指定位置
		$outputImagePath = './uploads/images/output_image.jpg';
		imagejpeg($backgroundImage, $outputImagePath);
		
		// 释放底图资源
		imagedestroy($backgroundImage);
		
		// 返回成功响应
		return json(['status' => 'success', 'path' => $outputImagePath]);
	}

php为png图片添加水印或自定义文字 背景:在线教育网站,用户参加在线考试后生成一个印有个人资料,成绩等内容的图片证书。 目标:用php在png图片上添加自定义文字 $name = "ABC"; $grade_ch = '优秀'; $grade_en = 'excellent'; $id_cert = 'XXXXXXX'; $id_user = '13111215484562XXXX'; $image = imagecreat 阅读详情

相关推荐

全国充电站分布数据

CnOpenData推出的充电站数据覆盖全国34个省份的3万条数据,包含充电站名称、省份名称、省份代码、商圈、经纬度等地理信息以及商业类型、评分、消费等衍生信息,能为城市规划、环境科学、市场分析、技术发展和社会经济研究等多个领域提供宝贵的数据支持。

Sunny9qx的博客 4028

在图片上添加文字水印

1 <?php 2 /** 3 打开任何一种格式的图片 在图片的中间加上一个文字水印 保存 4 只是保存下来 并不会输出到浏览器 5 */ 6 function imagewater($filename,$string){ 7 //获得图片的属性 8 list($wi...

weixin_30872337的博客 113

从医疗成像到工业检测:CMOS图像传感器NIR技术的最新应用案例解析

本文深入解析了CMOS图像传感器NIR技术在医疗成像和工业检测中的最新应用案例。通过提升量子效率至70%,NIR技术实现了血管可视化、材料缺陷检测等突破性进展,显著提高了医疗诊断精度和工业质检效率。文章还探讨了系统集成关键考量和前沿发展趋势。

weixin_30879169的博客 90

php生成图片并添加文字标题(php程序代码)

以下是一个使用PHP生成图片并添加文字标题的示例代码。这个示例使用了GD库,这是PHP中用于图像处理的内置库

阿酷tony 1015

AFSim仿真系统中的图像处理器:从静态图像到视频流的目标识别技术解析

本文深入解析了AFSim仿真系统中WSF_IMAGE_PROCESSOR图像处理器的核心功能与技术实现。它详细阐述了该处理器如何从静态图像与视频流中完成目标检测、跟踪与识别,将原始像素数据转化为可供指挥系统使用的轨迹情报,并重点介绍了其基于约翰逊准则的目标识别进阶逻辑、关键参数配置以及脚本扩展能力,为构建高逼真度仿真应用提供了实践指导。

cola5的博客 214

AAAI 2025杰出论文解读:神经符号推理与生物多样性计算的突破性进展

本文深度解读了AAAI 2025两篇杰出论文的突破性进展。南京大学周志华团队提出“溯因反射”框架,高效解决神经符号推理中的“不一致性”核心难题,为构建可靠、可解释的AI系统提供了新路径。斯坦福大学等机构的DiVShift研究,则系统分析了公民科学数据中的复杂分布偏移,为利用海量数据精准监测生物多样性及应对AI数据偏差提供了关键方法论。

weixin_29085865的博客 501

PHP图片加文字水印,保存图片文件,并浏览器输出显示

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34293141的博客 1557

华为OD面试八股真题 - 操作系统相关 - 2

华为OD技术面,操作系统相关八股真题提供详细解答,这篇博客主要涉及于进程和线程相关知识点

qq_45776114的博客 968

给 LikeShop 加一个自定义分销佣金规则:改了哪几个文件

为在LikeShop中添加自定义分销佣金规则(如二级分销商团队激励),需精准定位核心文件:DistributionLogic.php 实现计算逻辑扩展,后台配置逻辑支持可配性,数据库迁移新增字段。关键在于不硬编码比例,通过租户隔离的配置表实现灵活管理。结算与售后逻辑仅在涉及差异化条件时才需调整。务必验证全链路状态流转,避免“算对但结不了”或“退了仍返佣”问题。核心改动聚焦于计算、配置、数据三端,确保可维护性与可配置性。

hudie765的博客 297

Unity与iOS原生交互实战指南

C#(DllImport) → C 接口(extern "C") → Objective‑C / SwiftObjective‑C → UnitySendMessage → C#(GameObject + public 方法)在写.mm文件;在里面写;C# 用声明;调用它,参数就是 string / 数值等;在.mm里做你想做的 iOS 原生操作。在 Unity 里准备一个常驻 GameObject,比如;上面挂一个脚本,写;在 iOS 插件中用;

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1357

使用abagen工具箱获取基于脑区的基因表达矩阵

脑区模板定义了您感兴趣的脑区的空间位置。abagen提供了一些预定义的脑区模板,您可以选择使用,也可以使用自定义的脑区模板。它提供了一种简便的方式来获取基于脑区的基因表达矩阵。abagen需要使用Allen脑图谱数据来获取基因表达矩阵。您可以使用abagen内置的下载功能来获取这些数据。这就是使用abagen工具箱获取基于脑区的基因表达矩阵的详细步骤。通过按照上述步骤操作,您可以轻松获取并使用Allen脑图谱数据中的基因表达信息。一旦您加载了脑区模板,您可以使用abagen来获取基于脑区的基因表达矩阵。

web_bug407的博客 1326

数字证书与身份认证仿真实验配置

用户证书指纹: 4C:77:13:77:4B:18:ED:59:D8:6C:36:58:A6:00:51:FD:04:C5:A4:92:19:F1:64:CA:EA:A1:80:16:0F:EC:D1:00。根证书指纹: E3:CB:22:0C:B4:09:2F:83:07:84:AE:EE:6C:BF:F0:24:9F:3F:75:F5:AA:54:99:52:F5:D1:0F:DC:6C:F6:98:C9。[1] CA 根证书自签名验证: /opt/ca/certs/ca.crt: OK。

lightningyang的博客 406

第42章:AI代码生成的质量标准——何时用AI、何时自己写

> - AI代码生成的质量分级标准:可用、稳定、安全、优雅 > - 一个决策矩阵:什么场景适合用AI,什么场景必须人工编写 > - 如何评估AI生成的代码质量(复杂度、可读性、安全性) > - 实战对比:同一需求下AI生成代码 vs 人工编写代码 > - 团队落地:将质量标准集成到Code Review和CI流程 > - 我如何将团队AI代码接受率从70%提升到90%

sfishfly的博客 161

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 507

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Calico 网络插件实战

集群外部主机可以访问集群内部应用集群内部应用也可以访问集群外部主机各个namespace之间没有做任何的隔离策略如果希望在 IP 地址或端口层面控制网络流量, 考虑使用 Kubernetes 网络策略(NetworkPolicy)。NetworkPolicy 是一种以应用为中心的结构,允许你设置如何允许Pod与网络上的各类网络“实体” 通信。NetworkPolicy 适用于一端或两端与 Pod 的连接,与其他连接无关。**提示:**网络策略通过网络插件来实现。

weixin_63581562的博客 440

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

GitHub 热榜项目:日榜(2026-11-07)

给编码智能体配技能的项目最热:cloudflare/security-audit-skill 把审计拆成六阶段并输出可验证 JSON,新增 2,548 星;mattpocock/skills 把工程技能放进 .agents 目录,新增 2,070 星。Web 应用框架也有四个项目集中上榜,以 react/react 为代表。

u130130的博客 388

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ThinkPHP+UniApp 多端圈子系统如何设计:论坛内容、实时会话与交易模块的技术实现!

本文介绍基于ThinkPHP与UniApp的多端兴趣圈子系统设计,实现小程序、H5、App三端统一账号与数据同步。系统采用模块化架构,支持圈子管理、论坛互动、实时会话与可选交易功能,通过统一消息中心复用通知与会话通道,保障跨端一致性。核心亮点包括权限清晰的圈主与平台管理分离、内容核验前置、数据冷热分离及缓存优化,确保系统可扩展、易维护,适用于同好社群、本地团体等场景。

2603_96017077的博客 158

CTF2困难部分

该题为一道综合型Web安全挑战,涉及SSTI(服务器端模板注入)、LFI(本地文件包含)、PHAR反序列化、命令执行及SQL注入。攻击者通过绕过WAF限制,利用Jinja2模板的__builtins__和getattr等机制实现任意文件读取与命令执行;结合PHAR文件伪造触发反序列化漏洞,写入webshell并读取flag;同时在数据库查询中通过注释绕过空格过滤,联合注入获取敏感信息。最终成功获取flag:CTF2{b62c748a-160c-481c-9068-03dfe68ae1d9}。

fengci111的博客 177

零信任架构实战:基于天远单人婚姻查询构建自动化智慧住房资格核验网关

破解公租房资格核查痛点:从传统纸质婚姻凭证抽检到权威民政数据穿透直连 在智慧城市公共租赁住房(公租房)、保障性租赁住房以及共有产权房等民生保障工程中,保障房资源的公平精准分配是住房保障管理中台的核心职责。按照现行住房保障准入政策,申请主体的家庭结构直接决定了配租资格准入与面积配给标准:单身家庭申请人通常享有特定的单人保障配额与独立的财产评估标准,要求申请人具

2501_94042197的博客 198

网络优化有没有效果?如何对比实施前后的关键指标?

网络优化有没有效果,不能只靠主观感受,也不能只看某一次测速结果。更科学的做法是:优化前建立基线数据,优化后使用相同或尽可能接近的条件重新测试,再结合网络延迟、抖动、丢包率、业务响应时间和故障频率等指标进行综合判断。对于企业来说,网络优化最终要服务于实际业务。网络质量指标改善固然重要,但更值得关注的是员工访问业务系统是否更加稳定、关键操作是否更加流畅,以及网络故障是否得到有效控制。

ESDWAN的博客 636

本地化部署会议视频软件如何开展试点?试用范围、评估指标与推广步骤

试用范围覆盖真实差异,评估指标具有明确口径,推广过程具备放行和回退机制。对于政企、金融、医疗及信创项目,尤其要避免三个误区:把本地部署等同于合规,把演示并发等同于生产容量,把功能清单等同于可运维能力。如果正在准备试点,建议先整理一张“网络—终端—业务—故障”矩阵,再决定试用人数。

hz56789的博客 326

阿里云ESA缓存自动刷新的WordPress插件(含手动刷新)

WordPress用户若使用阿里云ESA缓存,常遇内容更新后页面未刷新问题。推荐免费插件“阿里云ESA缓存刷新插件”,支持发布/编辑文章时自动刷新文章页、首页、分类页、标签页(可自选),并可手动或批量刷新指定URL。安装启用后,在设置中填写ESA凭证,开启自动刷新,保存配置即可。验证方式:发布文章后查看阿里云ESA控制台刷新记录,确保缓存及时更新,提升网站访问效率。

boke112的博客 445

BUUCTF-菜刀流量-MISC-学习笔记

从 1970-01-01 00:00:00 UTC 起算的秒数,——Wireshark 直接告诉你它回答的是谁;由表可知道,96帧返回了flag.rar。, 代表删除键,先删了4次,又删了1次。所以密码是:SuperMaster。解析128帧的响应,即133帧。所以这是一个标准抓包文件,用。解压压缩包拿到html代码。:选中 128 帧,展开。:128 和 131 的。能把一问一答放在一起看;是八进制(Oct)的数字。(或 TCP 层)看到。对比一下ASCii 码表。

晓梦林的博客 38

UOS lighttpd 与 PHP FastCGI:动态时间页面及验证

1. 服务介绍 lighttpd 是轻量 Web 服务器,负责接收HTTP请求、提供静态文件,并将PHP请求交给FastCGI后端处理。它不是Apache,配置检查、模块和日志路径应按lighttpd核对。本文完成原题动态时间页面,刷新时由服务端重新生成日期时间。 2. 准备运行环境 原实验UOS/Debian系,管理员权限、可用软件源、普通Web客户端;确

weixin_44524357的博客 221

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 269

网络安全-PHP基础

本文介绍了PHP的基础知识,包括其作为服务器端脚本语言的核心功能:生成动态网页、处理表单、操作数据库及实现安全控制。重点讲解了变量定义(以$开头)、作用域(局部、全局、静态)、函数参数使用、输出语句(echo与print的区别)以及数组和中文字符支持。通过实例演示了变量作用域的限制与解决方法,并引入EOF语法简化多行HTML输出,为初学者提供清晰的入门指引。

weixin_48137911的博客 177
上一篇: fastadmin 动态修改data-params
下一篇: FastAdmin 后台下拉框关联其他字段时 展示多个字段
爱摸鱼的码农
博客等级 码龄6年 19粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值