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

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

php  /  管理员 发布于 2年前   1342

怎么使用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
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • windows系统中安装FFMpeg及在phpstudy环境php7.3 + php-ffmpeg扩展的使用流程步骤(0个评论)
    • 在php语言中对数组参数实现签名算法及加解密数组功能流程步骤(0个评论)
    • 在PHP语言中实现手机加密解密算法代码示例(0个评论)
    • 在PHP 8.3版本中json_validate跟json_decode函数对比浅析(0个评论)
    • 在PHP语言中class类自动加载相关文件浅析(0个评论)
    • 近期文章
    • 如何优雅处理async await错误推荐:await-to-js库(0个评论)
    • lodash工具库(0个评论)
    • 在Laravel项目中使用中间件方式统计用户在线时长功能代码示例(0个评论)
    • 在Laravel中构建业务流程模型(0个评论)
    • windows系统中安装FFMpeg及在phpstudy环境php7.3 + php-ffmpeg扩展的使用流程步骤(0个评论)
    • 在go语言中对浮点的数组、切片(slice)进行正向排序和反向排序(0个评论)
    • 在go语言中对整数数组、切片(slice)进行排序和反向排序(0个评论)
    • 在go语言中对字符串数组、切片(slice)进行排序和反向排序(0个评论)
    • 最新国内免注册ChatGPT体验站_ChatGPT镜像站访问链接地址2023/3/28持续更新(0个评论)
    • 在Laravel项目中的实现无密码认证之:发送邮箱链接授权(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 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
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    Top

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

    侯体宗的博客