亲宝软件园·资讯

展开

php图片放大

qq_39688201 人气:0

前言

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

一. 获取图片

$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();

加载全部内容

相关教程
猜你喜欢
用户评论