在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.安装 qr-code这里我们通过 我的环境为 linux,我们键入以下命令来进行该扩展的安装: composer require endroid/qr-code
当扩展安装完毕后,我们就可以开始下面的操作了。 2.生成二维码首先我们需要在项目中引入 好了,现在我们引入 use Endroid\QrCode\QrCode; // $content 一般为url地址 当然也可以是文字内容 $content = 'http://www.baidu.com?rand=' . rand(1000, 9999); $qrCode = new QrCode($content); // 指定内容类型 header('Content-Type: '.$qrCode->getContentType()); // 输出二维码 echo $qrCode->writeString(); 好了,当指定了内容类型后,会直接在页面输出二维码 那这种直接输出的二维码怎么应用于项目中呢,一般都是直接写在 <img src="http://localhost:8080/projecttest/qrtest?id=1234" alt="这是一个二维码" /> 这样,就可以把二维码显示在页面的任意位置了。当然,我们也可以把它存入文件中,生成一个任意格式的图片,比如说: $qrCode->writeFile(__DIR__ . '/qrcode.png');
这样我们就可以根据图片路径在页面上展示二维码了 3.简单的示例文件以及常用参数介绍贴出一个简单的类处理文件,并介绍一下 类文件: namespace '命名空间'; use Endroid\QrCode\ErrorCorrectionLevel; use Endroid\QrCode\LabelAlignment; use Endroid\QrCode\QrCode; class QrcodeComponent { protected $_qr; protected $_encoding = 'UTF-8'; protected $_size = 300; protected $_logo = false; protected $_logo_url = ''; protected $_logo_size = 80; protected $_title = false; protected $_title_content = ''; protected $_generate = 'display'; // display-直接显示 writefile-写入文件 const MARGIN = 10; const WRITE_NAME = 'png'; const FOREGROUND_COLOR = ['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]; const BACKGROUND_COLOR = ['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]; public function __construct($config) { isset($config['generate']) && $this->_generate = $config['generate']; isset($config['encoding']) && $this->_encoding = $config['encoding']; isset($config['size']) && $this->_size = $config['size']; isset($config['display']) && $this->_size = $config['size']; isset($config['logo']) && $this->_logo = $config['logo']; isset($config['logo_url']) && $this->_logo_url = $config['logo_url']; isset($config['logo_size']) && $this->_logo_size = $config['logo_size']; isset($config['title']) && $this->_title = $config['title']; isset($config['title_content']) && $this->_title_content = $config['title_content']; } /** * 生成二维码 * @param $content 需要写入的内容 * @return array | page input */ public function create($content) { $this->_qr = new QrCode($content); $this->_qr->setSize($this->_size); $this->_qr->setWriterByName(self::WRITE_NAME); $this->_qr->setMargin(self::MARGIN); $this->_qr->setEncoding($this->_encoding); $this->_qr->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH); $this->_qr->setForegroundColor(self::FOREGROUND_COLOR); $this->_qr->setBackgroundColor(self::BACKGROUND_COLOR); if ($this->_title) { $this->_qr->setLabel($this->_title_content, 16, '字体地址', LabelAlignment::CENTER); } if ($this->_logo) { $this->_qr->setLogoPath($this->_logo_url); $this->_qr->setLogoWidth($this->_logo_size); $this->_qr->setRoundBlockSize(true); } $this->_qr->setValidateResult(false); if ($this->_generate == 'display') { // 前端调用 例:<img src="http://localhost/qr.php?url=base64_url_string"> header('Content-Type: ' . $this->_qr->getContentType()); return $this->_qr->writeString(); } else if ($this->_generate == 'writefile') { return $this->_qr->writeString(); } else { return ['success' => false, 'message' => 'the generate type not found', 'data' => '']; } } /** * 生成文件 * @param $file_name 目录文件 例: /tmp * @return array */ public function generateImg($file_name) { $file_path = $file_name . DS . uniqid() . '.' . self::WRITE_NAME; if (!file_exists($file_name)) { mkdir($file_name, 0777, true); } try { $this->_qr->writeFile($file_path); $data = [ 'url' => $file_path, 'ext' => self::WRITE_NAME, ]; return ['success' => true, 'message' => 'write qrimg success', 'data' => $data]; } catch (Exception $e) { return ['success' => false, 'message' => $e->getMessage(), 'data' => '']; } } } 使用方法: use '命名空间'; $qr_url = 'http://www.baidu.com?id=' . rand(1000, 9999); $file_name = '/tmp'; // 直接输出 $qr_code = new QrcodeComponent(); $qr_img = qr_code->create($qr_url); echo $qr_img; // 生成文件 $config = [ 'generate' => 'writefile', ]; $qr_code = new QrcodeComponent($config); $qr_img = $qr_code->create($qr_url); $rs = $qr_code->generateImg($file_name); print_r($rs); 常用参数解释:
|
2022-08-17
2022-11-06
2022-08-15
2022-08-17
2022-08-16
请发表评论