1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| <?php /** * ============================================================================ * ---------------------------------------------------------------------------- * 二维码生成 * ---------------------------------------------------------------------------- * ============================================================================ */ namespace app\common\utils;
use Endroid\QrCode\ErrorCorrectionLevel; use Endroid\QrCode\QrCode as QrCodePackage;
class QrCode { /** * 获取二维码 * php7.1 最新版本composer安装:composer require endroid/qr-code:3.5.9 * @setSize - 二维码大小 px * @setWriterByName - 写入文件的后缀名 * @setMargin - 二维码内容相对于整张图片的外边距 * @setEncoding - 编码类型 * @setErrorCorrectionLevel - 容错等级,分为L、M、Q、H四级 * @setForegroundColor - 前景色 * @setBackgroundColor - 背景色 * @setLabel - 二维码标签 * @setLogoPath - 二维码logo路径 * @setLogoWidth - 二维码logo大小 px * * @pathUrl 保存的路径 * @logo 二维码中间logo图,必须在本地服务器内 * @setLogo 是否开启二维码中放logo [false否 true是] * @link 跳转链接 * @setSize 二维码大小 px * @logoSize logo大小 px * @delFile 是否删除文件 */ public static function getQrCode($pathUrl = "",$link = '',$setSize = 300,$setLogo = false,$logo = "",$logoSize = 90,$delFile = true){ //判断图片是否在本地服务器上,不存在则不可设置 if(!file_exists($logo) && $setLogo){ return ['code'=>500,'msg'=>'设置二维码中的logo图路径不正确']; }
//基础配置 $config = [ 'set_log' => $setLogo, 'link' => $link,//跳转链接 'set_size' => $setSize,//二维码大小 px 'path' => $pathUrl ? : root_path() .'uploads/qrcode/',//保存路径(绝对路径),root_path()属于tp6 ,tp5请用env('root_path') 'logo_width' => $logoSize, 'logo_path' => $logo ];
$qrCode = new QrCodePackage($config['link']); // 容错率 $qrCode->setErrorCorrectionLevel(new ErrorCorrectionLevel(ErrorCorrectionLevel::HIGH)); //转绝对路径 $logo_path = str_replace(request()->domain().'/',root_path(),$config['logo_path']); if($config['set_log']){ $qrCode->setLogoPath($logo_path); $qrCode->setLogoWidth($config['logo_width']); }
//随机文件名 $name = sha1(uniqid()); if (!file_exists($config['path'])) mkdir($config['path'], 0777, true); $path = $config['path'] .$name . '.png'; // header('Content-Type: image/png'); header('Content-Type: '.$qrCode->getContentType()); if (is_file($path)) { // echo file_get_contents($path);//显示二维码 return ['code'=>200,'url'=>str_replace(root_path(),request()->domain().'/',$path)]; } else { $qrCode->setSize($config['set_size']); //生成文件 $qrCode->writeFile($path); return ['code'=>200,'url'=>str_replace(root_path(),request()->domain().'/',$path)]; // echo $qrCode->writeString();//显示二维码 }
//@去操作这张图片 //@删除文件 if($delFile){ unlink($path); } die; } }
|