这两天在开发一个支付宝授权功能,因为要用到二维码分享扫描功能,每条记录都有专属的二维码,所以需要生成专属二维码并且这个二维码还得有些引导功能,所以需要将生成的二维码放在实现准备好的图片上面。
我们先来创建我们的项目结构,生成二维码我们用的是phpqrcode库进行生成,我们先创建我们的图片存放文件夹img文件夹,并将phpqrcode库放到我们项目中,代码结构如下:
img文件夹是我们用来存放生成的二维码图片,以及存放我们实现准备的底图,comm.php文件是我们的公共方法,待会将二维码放在底图的方法我们会写在这里,getQrcode.php是我们生成二维码的方法文件。
我们先来创建我们的二维码,代码如下:
<?php
header('Access-Control-Allow-Origin:*');
// 响应类型
header('Access-Control-Allow-Methods:POST');
// 响应头设置
header('Access-Control-Allow-Headers:x-requested-with,content-type');
header('Content-Type:application/json; charset=utf-8');
include 'phpqrcode.php';
include 'comm.php';
@$id = $_GET['id']; //链接获取参数
$errorCorrentionLevel = 'L'; //容错级别
$matrixPoinSize = 6; //生成图片大小
#拼接URL
$value = 'url' //跳转地址
//本地文档相对路径
$url = 'img/';
//定义纠错级别
$errorLevel = "L";
//定义生成图片的宽度和高度,默认为3
$size = 3;
//调用Qrcode类的静态png方法生成二维码团
QRcode::png($value, $url . $id . '.png', $errorCorrentionLevel, $matrixPoinSize, 2);
//新图片
$img = '图片存放具体路径+名字'.png';
//输出图片处理图片
dealImage($img); //将二维码放在底图某个位置上
//header('location:' . $img);
?>
这样就会生成一张二维码的图片。
我们接下来再来封装将二维码放在底图位置上的方法,方法写在comm.php中,代码如下:
<?php
/**
* 图片处理公共方法
* Created by PhpStorm.
* User: p
* Date: 2018/10/25
* Time: 20:53
*/
function dealImage($src_path){
$dst_path = '底部图片具体路径'; //底部图片
//创建图片的实例
$dst = imagecreatefromstring(file_get_contents($dst_path));
$src = imagecreatefromstring(file_get_contents($src_path));
//获取水印图片的宽高
list($src_w, $src_h) = getimagesize($src_path);
//将水印图片复制到目标图片上,最后个参数50是设置透明度,这里实现半透明效果
imagecopymerge($dst, $src, 190, 350, 0, 0, $src_w, $src_h, 100);
//如果水印图片本身带透明色,则使用imagecopy方法
//imagecopy($dst, $src, 10, 10, 0, 0, $src_w, $src_h);
//输出图片
list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
switch ($dst_type) {
case 1://GIF
header('Content-Type: image/gif');
imagegif($dst);
break;
case 2://JPG
header('Content-Type: image/jpeg');
imagejpeg($dst);
break;
case 3://PNG
header('Content-Type: image/png');
imagepng($dst);
break;
default:
break;
}
imagedestroy($dst);
imagedestroy($src);
}
这样我们便最终生成我们的最终二维码,大家可以试试~
更多文章请关注微信公众号