php图片放大合成加入字体操作示例介绍

 更新时间:2022年08月17日 09:28:32   作者:qq_39688201  
这篇文章主要介绍了php图片放大、图片合成、图片放入字体的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

之前只是生成二维码,现在需要把二维码放在一个背景图并且需要有文字介绍。之前没做过,现在做好了记录一下。

一. 获取图片

$background_path = root_path() . 'public/event/template.jpg'; //背景图片地址
$qrcode_path = root_path() . 'public/event/qrcode/1653635892.png'; // 二维码图片地址
// 背景图
$background_image = imagecreatefromjpeg($background_path);
// 二维码图
$qrcode_image = imagecreatefrompng($qrcode_path);

备注:图片地址必须是绝对地址

二. 把二维码图片放大

//获取图片的属性,第一个宽度,第二个高度,类型1=>gif,2=>jpeg,3=>png
list($qrcode_x, $qrcode_y) = getimagesize($qrcode_path);
// 把二维码图片放大到1200像素
$size = 1200;
// 新建一个画布
$finalQrcode = imagecreatetruecolor($size, $size);
// 把二维码图片放到新的画布上
imagecopyresampled($finalQrcode, $qrcode_image, 0, 0, 0, 0, $size, $size, $qrcode_x, $qrcode_y);

备注:图片放大其实就是新建一个你需要尺寸的大小的画布,把之前的图片移到新的画布上,通过参数去控制图片在画布的位置及大小

三. 多个图片合成

// 把背景和二维码图片合成在一起
//获取图片的属性,第一个宽度,第二个高度,类型1=>gif,2=>jpeg,3=>png
list($background_width,$background_height) = getimagesize($background_path);
// 新建一个画布,用来填充背景
$finalImage = imageCreatetruecolor($background_width,$background_height);
// 图像分配颜色
$color = imagecolorallocate($finalImage, 255, 255, 255);
//设置居中图片的X轴坐标位置
$x = ($background_width-$size)/2;
//设置居中图片的Y轴坐标位置
$y = 430;
// 用于用给定的颜色填充图像
imagefill($finalImage, 0, 0, $color);
// 将颜色定义为透明色
imageColorTransparent($finalImage, $color);
// 用背景来填充画布
// 目标图 源图 目标X坐标点 目标Y坐标点 源的X坐标点 源的Y坐标点 目标宽度 目标高度 源图宽度 源图高度
imagecopyresampled($finalImage,$background_image,0,0,0,0,$background_width,$background_height,$background_width,$background_width);
//二维码图片在背景上的位置 $x横坐标,$y纵坐标
imagecopymerge($finalImage,$finalQrcode, $x,$y,0,0,$size,$size, 100);

四. 添加文字并居中

图片的文字进行居中,需要我们通过图片的尺寸,文字需要占的尺寸去计算。

现在有一个composer库(stil/gd-text)可以实现该功能。

composer require stil/gd-text
$text = '测试测试测试测试测试测试测试';
// 字体的不同会导致汉字写入图片乱码
$font = root_path() . 'public/font/Alibaba-PuHuiTi-Medium.ttf'; // 字体的绝对地址
$showY = 2480-800;
$box = new Box($finalImage);
$box->setFontFace($font);
$box->setFontColor(new Color(0, 60, 121));//字体颜色
$box->setFontSize(160);//字体大小
$box->setLineHeight(2);//行高
$box->setBox(-22, $showY, 2480, 200);
$box->setTextAlign('center', 'top'); // 字体居中
$box->draw($text);
Header("Content-type: image/jpeg");
//将画布保存到指定的文件
imagejpeg($finalImage, root_path() . 'public/event/qrcode/111.png');

五. 完整的代码

$background_path = root_path() . 'public/event/template.jpg'; //背景图片地址
$qrcode_path = root_path() . 'public/event/qrcode/1653635892.png'; // 二维码图片地址
// 背景图
$background_image = imagecreatefromjpeg($background_path);
// 二维码图
$qrcode_image = imagecreatefrompng($qrcode_path);
//获取图片的属性,第一个宽度,第二个高度,类型1=>gif,2=>jpeg,3=>png
list($qrcode_x, $qrcode_y) = getimagesize($qrcode_path);
// 把二维码图片放大到1200像素
$size = 1200;
$finalQrcode = imagecreatetruecolor($size, $size);
imagecopyresampled($finalQrcode, $qrcode_image, 0, 0, 0, 0, $size, $size, $qrcode_x, $qrcode_y);
// 把背景和二维码图片合成在一起
//获取图片的属性,第一个宽度,第二个高度,类型1=>gif,2=>jpeg,3=>png
list($background_width,$background_height) = getimagesize($background_path);
$finalImage = imageCreatetruecolor($background_width,$background_height);
$color = imagecolorallocate($finalImage, 255, 255, 255);
//设置居中图片的X轴坐标位置
$x = ($background_width-$size)/2;
//设置居中图片的Y轴坐标位置
$y = 430;
imagefill($finalImage, 0, 0, $color);
imageColorTransparent($finalImage, $color);
imagecopyresampled($finalImage,$background_image,0,0,0,0,$background_width, $background_height,$background_width,$background_width);
//图片在背景上的位置 $x横坐标,$y纵坐标
imagecopymerge($finalImage,$finalQrcode, $x,$y,0,0,$size,$size, 100);
$text = '测试测试测试测试测试测试测试';
$font = root_path() . 'public/font/Alibaba-PuHuiTi-Medium.ttf';
$showY = 2480-800;
$box = new Box($finalImage);
$box->setFontFace($font);
$box->setFontColor(new Color(0, 60, 121));//字体颜色
$box->setFontSize(160);//字体大小
$box->setLineHeight(2);//行高
$box->setBox(-22, $showY, 2480, 200);
$box->setTextAlign('center', 'top'); // 字体居中
$box->draw($text);
Header("Content-type: image/jpeg");
//将画布保存到指定的文件
imagejpeg($finalImage, root_path() . 'public/event/qrcode/111.png');
exit();

到此这篇关于php图片放大合成加入字体操作示例介绍的文章就介绍到这了,更多相关php图片放大内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux系统下php获得系统分区信息的方法

    Linux系统下php获得系统分区信息的方法

    这篇文章主要介绍了Linux系统下php获得系统分区信息的方法,涉及Linux下php系统分析的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • discuz程序的PHP加密函数原理分析

    discuz程序的PHP加密函数原理分析

    康盛的 authcode 函数可以说对中国的PHP界作出了重大贡献。包括康盛自己的产品,以及大部分中国使用PHP的公司都用这个函数进行加密,authcode 是使用异或运算进行加密和解密。
    2011-08-08
  • FirePHP 推荐一款PHP调试工具

    FirePHP 推荐一款PHP调试工具

    PHP调试有很多中方法。今天给大家推荐的是 FirePHP 这个工具,是基于firefox的一个组件。Firephp组件安装地址。使用之前需要先安装下这个组件。完了还需要down一个FirePHP的包。
    2011-04-04
  • php中钩子(hook)的原理与简单应用demo示例

    php中钩子(hook)的原理与简单应用demo示例

    这篇文章主要介绍了php中钩子(hook)的原理与简单应用,结合完整demo实例形式分析了php中钩子(hook)的原理及简单使用操作技巧,需要的朋友可以参考下
    2019-09-09
  • PHP的序列化和反序列化详情

    PHP的序列化和反序列化详情

    这篇文章主要介绍了PHP的序列化和反序列化详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Laravel实现队列的示例代码

    Laravel实现队列的示例代码

    这篇文章主要为大家详细介绍了Laravel实现队列的相关知识,文中的示例代码讲解详细,具有一定的学习和借鉴价值,感兴趣的小伙伴可以跟随小编一起学习游戏
    2023-02-02
  • php中stdClass的用法分析

    php中stdClass的用法分析

    这篇文章主要介绍了php中stdClass的用法,实例分析了stdClass的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • PHP实现的分页类定义与用法示例

    PHP实现的分页类定义与用法示例

    这篇文章主要介绍了PHP实现的分页类定义与用法,结合具体实例形式分析了php封装的分页类常用操作及具体使用技巧,需要的朋友可以参考下
    2017-07-07
  • PHP使用SOAP调用API操作示例

    PHP使用SOAP调用API操作示例

    这篇文章主要介绍了PHP使用SOAP调用API操作,结合实例形式分析了php基于SOAP调用API的常见操作技巧及相关问题解决方法,需要的朋友可以参考下
    2018-12-12
  • php获取远程图片的两种 CURL方式和sockets方式获取远程图片

    php获取远程图片的两种 CURL方式和sockets方式获取远程图片

    php获取远程图片的两种:CURL方式和sockets方式获取远程图片,需要的朋友可以参考下。
    2011-11-11

最新评论