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图片放大内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(php图片放大合成加入字体操作示例介绍)