侯体宗的博客
  • 首页
  • Hyperf2.1版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

怎么使用PHP在图片上覆盖文字

php  /  管理员 发布于 1年前   811

怎么使用PHP在图片上覆盖文字


这是一个简单的PHP脚本,带有一些可以直接在命令行中运行的假设。可以轻松调整它以满足其他更复杂的要求,例如水印图像,针对移动设备优化的图像,从Google Spreadsheets或Airtable中读取数据等,因此您可以随意分叉存储库或下载源代码并根据需要对其进行破解。


首先,使用一些变量,这样我们就可以调整脚本行为,而不必弄清楚代码在哪里进行设置

$ csv_file ='names.csv';
$ background ='background.jpg';
$ signature ='sig.png';
$ font ='ConeriaScript.ttf';

然后,我们读取并解析了CSV文件,因此通过将其转换为以列名作为键的关联数组,以后更易于阅读。

//来自https://www.php.net/manual/zh/function.str-getcsv.php的CSV代码

$csv = array_map('str_getcsv', file($csv_file));
array_walk($csv, function (&$a) use ($csv) {
   $a = array_combine($csv[0], $a);
});
array_shift($csv);

对于此特定背景,我们需要将当前日期作为三个字符串放置在三个不同的位置。

$ day = date('j');
$ month = date('F');
$ year = date('Y');

现在我们开始玩PHP的图像功能。首先,我们需要阅读背景图像以获取一些基本信息并进行一些准备,例如设置文本颜色,图像宽度(用于居中放置文本)以及读取签名图像及其尺寸。

$ image = imagecreatefromjpeg($ background);
$ color = imagecolorallocate($ image,0,0,0);
$ width = imagesx($ image);
$ signature = imagecreatefrompng($ signature);
$ signature_width = imagesx($ signature);
$ signature_height = imagesy($ signature);

现在我们已经准备好图像数据,我们将开始读取列表中的每个名称,以便我们可以生成带有所有覆盖文字的单个图像。为了便于阅读,我将名称和原因保存在自己的变量中。

foreach($ csv为$ row){
   $ name = $ row ['Name'];
   $ reason = $ row ['Reason'];

在这里,我正在重新阅读背景图片。对于循环中的第一项,这是没有意义的,因为我已经在上面阅读过,但是由于所有image *函数都更改了它们的输入,因此,如果不这样做,我将结束列表中的所有图像,将结束所有先前的图像。来自所有先前图像的文本重叠;不好。我还得到了文本“装订框”,它们基本上是文本四个角的位置;我这样做是为了使文本在图像中居中。

 $ image = imagecreatefromjpeg($ background);
   $ name_box = imagettfbbox(40,0,$ font,$ name);
   $ reason_box = imagettfbbox(40,0,$ font,$ reason);

现在是时候在图像上实际渲染文本了。这是通过向PHP提供一些信息来完成的,包括目标图像,文本大小,角度,x和y位置,颜色,字体(是的,您可以使用字体!),最后但并非最不重要的是实际文本。

imagettftext($image, 40, 0, ($width - $name_box[2]) / 2, 635, $color, $font, $name);
   imagettftext($image, 40, 0, ($width - $reason_box[2]) / 2, 790, $color, $font, $reason);
   imagettftext($image, 32, 0, 400, 895, $color, $font, $day);
   imagettftext($image, 32, 0, 600, 895, $color, $font, $month);
   imagettftext($image, 32, 0, 600, 975, $color, $font, $year);

正确覆盖文本后,我需要在文本顶部添加“签名”图像,以使其看起来更好,因此我告诉PHP在顶部复制签名图像(透明的PNG文件),如您所见,不仅要提供位置,还要提供尺寸。

 imagecopy($ image,$ signature,400,980,0,0,$ signature_width,$ signature_height);

差不多了!在这里,我通过提供名称将结果图像保存到磁盘。我没有提供名称,PHP只会输出内容,也可以通过提供正确的标头将其用作下载链接。

imagejpeg($ image,“ diplomas / $ name.jpg”);

完成图像处理,它就会被销毁。

imagedestroy($ image);

希望能帮到你


  • 上一条:
    laravel-admin中省市区select三级联动功能demo
    下一条:
    怎么在php中实现多线程
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • TP(3/5)
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • PHP + Memcache实现简单的统计当前在线人数功能(0个评论)
    • 红包算法之二倍均值算法-php、js版示例代码(0个评论)
    • 2022年最新PHP(八股文)面试题附答案,建议收藏(0个评论)
    • 最新版php8.1.3于2022年2月17日发布(0个评论)
    • PHP语言实现流接口模式示例代码(0个评论)
    • 近期文章
    • Laravel 9.13版本发布(0个评论)
    • beego+GeoLite2免费数据库获取ip地址经纬度等定位归属信息(0个评论)
    • redis安全配置之修改端口、添加密码流程步骤及启动使用(0个评论)
    • PHP + Memcache实现简单的统计当前在线人数功能(0个评论)
    • Thinkphp5.1框架中实现Session+Redis会话共享流程步骤(0个评论)
    • go语言中使用Signbit()函数判断一个整数是正数或负数(0个评论)
    • 删库跑路之一链家程序员删除公司9TB数据被判7年,望各大码农警之!(0个评论)
    • Laravel角色和权限:拦截器Gates和策略Policies的解释(0个评论)
    • Laravel 9.12版本发布(0个评论)
    • go语言中实现把数据写入文件函数WriteFile()编写(0个评论)
    • 近期评论
    • 博主 在

      hyperf框架常用命令-在centos7中退出命令及在docker容器中退出命令中评论 @路过的靓仔:cdn静态资源被墙,已修复..
    • GGGGGGGGG 在

      layui框架常用输入框介绍中评论 写的很好解决问题..
    • 路过的靓仔 在

      hyperf框架常用命令-在centos7中退出命令及在docker容器中退出命令中评论 剩下好多 wait 状态的..
    • 激光豆芽 在

      为什么你不能安逸?国内996为什么没有国外955香?中评论 国内现在无意义的内卷太多了..
    • 激光豆芽 在

      阿里云香港服务器搭建自用vpn:Shadowsocks使用流程步骤中评论 厉害了..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客