1.安装phpqrcode,命令:composer?require?endroid/qrcode? ? ?如果已安装无需重复安装
2.控制器中引用:use?Endroid\QrCode\QrCode
3.查看自己PHP版本:我的是7.3,因为版本不同,使用方法可能有区别,具体看官方文档
4.我的要求是生成带邀请码的分享页面,步骤及代码如下:
- 步骤一:先用qrcode生成二维码,放到目录下
- 步骤二:二维码与背景图合并,然后替换上一步生成的二维码
- 步骤三:返回生成的图片地址
/**
* 生成二维码
*/
public function build()
{
$user_id = $this->auth->id;
if (empty($user_id)) $this->error('请登录');
$userInfo = User::where('id', $user_id)->field('id,code')->find();
$url = Config('url_domain_root') . '?code = ' . $userInfo->code;
// 生成二维码
$writer = new PngWriter();
$qrCode = QrCode::create($url)
->setEncoding(new Encoding('UTF-8'))
->setSize(300)
->setMargin(2)
->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())
->setForegroundColor(new Color(0, 0, 0))
->setBackgroundColor(new Color(255, 255, 255));
$result = $writer->write($qrCode);
// 二维码保存到目录下
$code_path = ROOT_PATH . 'public/code/' . $user_id . '_code.png';
$result->saveToFile($code_path);
// 与背景图合并
$dst_path = ROOT_PATH . 'public/share.png'; //背景图片路径
$src_path = $code_path;//覆盖图
//创建图片的实例
$dst = imagecreatefromstring(file_get_contents($dst_path));
$src = imagecreatefromstring(file_get_contents($src_path));
//获取覆盖图图片的宽高
list($src_w, $src_h) = getimagesize($src_path);
//将覆盖图复制到目标图片上,最后个参数100是设置透明度(100是不透明),这里实现不透明效果
imagecopymerge($dst, $src, 220, 900, 0, 0, $src_w, $src_h, 80);
//如果覆盖图图片本身带透明色,则使用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;
// }
header("Content-type: image/png");
$res = imagepng($dst, $code_path);//根据需要生成相应的图片
imagedestroy($dst);
imagedestroy($src);
$returnImg = Config('url_domain_root') . 'uploads/code/' . $user_id . '_code.png';
if ($res) $this->success('获取成功!', $returnImg);
$this->error('再试一次!');
}
|