怎么使用PHP在图片上覆盖文字
管理员 发布于 4年前   637
怎么使用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);
希望能帮到你
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
该博客于2020-12-7日,后端基于go语言的beego框架开发
前端页面使用Bootstrap可视化布局系统自动生成
是我仿的原来我的TP5框架写的博客,比较粗糙,底下是入口
侯体宗的博客
文章标签
友情链接