第一步: 首先需要先下载phpqrcode包,解压在项目中,我们只用到 phpqrcode.php 文件就可以;
phpqrcode下载链接为: http://phpqrcode.sourceforge.net/
第二步: 我放在了vendor文件夹中,位置大家随意,只要能成功引入即可;
第三步: 写方法,这里主要介绍一下 ajax_add 方法传入需要生成的数量-->num ; 因为我的项目需求二维码需要跟用户绑定,所以status为绑定状态,如果大家不需要的话可以将没有用的字段删除!
$image_path: 这里是图片生成后保存在项目中的位置(因为后续需要用到这里,所以我将图片保存位置拆分了);这里要特别强调一下: 设置路径的时候千万不要设置为 /uploads/.. 这样的,要把uploads前面的/去掉,因为ROOT_PATH 后面跟了\ 如果我们手动再写入/就会冲突,二维码无法生成
$file_path: 这里需要加入 ROOT_PATH拼接上面已经设置好的图片在项目中保存的位置,生成完整的在服务器中保存的路径
思路: for循环传入的需要生成的数量,首先创建数据,然后再调用生成二维码图片的方法根据返回的数据id将二维码图片的路径更新到数据库中
$url: 这里是生成二维码的链接以及参数; 链接必须要加 http:// 或者 https://
$filename: 这里是生成二维码的图片名称以及图片路径,可以设置为false,如果设置为false就不会生成图片了,因为项目需要,所以这里我设置了图片名称
public function ajax_add(){
$num=$this->request->post('num');
$data['create_time'] = date('Y-m-d',time());
$data['status'] = 2;
$image_path = 'uploads/qrcode/';
$file_path = ROOT_PATH . $image_path;
for ($i=1; $i<=$num; $i++)
{
$id = Db::name('qrcode')->insertGetId($data);
$url = "https://xxxx.com/index/index?id=$id";
$filename = $image_path . $id . '.png';
$this->qrcode($url,$filename,3,6);
$image['qrcode'] = $image_path.$id.'.png';
Db::name('qrcode')->where(['id' => $id])->update($image);
}
return json(['code' => 1, 'msg' => '生成成功,请稍后']);
}
这里的方法为调用phpqrcode.php,传入参数,生成图片;
$level: 容错级别,一般情况下按照我的参数生成的二维码扫描没有问题;
$size: 二维码大小
function qrcode($url,$filename,$level,$size)
{
Vendor('PHPQrcode.phpqrcode');
//容错级别
$errorCorrectionLevel = intval($level);
//生成图片大小
$matrixPointSize = intval($size);
//生成二维码图片
$Qrcode = new \QRcode();
//第二个参数false的意思是不生成图片文件,如果你写上‘picture.png’则会在根目录下生成一个png格式的图片文件
$Qrcode->png($url, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
}
现在,你试试是不是就生成成功啦?