62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace addons\qrcode\library;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use Endroid\QrCode\ErrorCorrectionLevel;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Service
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 生成二维码
							 | 
						||
| 
								 | 
							
								     * @param $params
							 | 
						||
| 
								 | 
							
								     * @return \Endroid\QrCode\QrCode
							 | 
						||
| 
								 | 
							
								     * @throws \Endroid\QrCode\Exception\InvalidPathException
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function qrcode($params)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $config = get_addon_config('qrcode');
							 | 
						||
| 
								 | 
							
								        $params = is_array($params) ? $params : [$params];
							 | 
						||
| 
								 | 
							
								        $params = array_merge($config, $params);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $params['labelfontpath'] = ROOT_PATH . 'public' . $config['labelfontpath'];
							 | 
						||
| 
								 | 
							
								        $params['logopath'] = ROOT_PATH . 'public' . $config['logopath'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 前景色
							 | 
						||
| 
								 | 
							
								        list($r, $g, $b) = sscanf($params['foreground'], "#%02x%02x%02x");
							 | 
						||
| 
								 | 
							
								        $foregroundcolor = ['r' => $r, 'g' => $g, 'b' => $b];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 背景色
							 | 
						||
| 
								 | 
							
								        list($r, $g, $b) = sscanf($params['background'], "#%02x%02x%02x");
							 | 
						||
| 
								 | 
							
								        $backgroundcolor = ['r' => $r, 'g' => $g, 'b' => $b];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 创建实例
							 | 
						||
| 
								 | 
							
								        $qrCode = new \Endroid\QrCode\QrCode($params['text']);
							 | 
						||
| 
								 | 
							
								        $qrCode->setSize($params['size']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 高级选项
							 | 
						||
| 
								 | 
							
								        $qrCode->setWriterByName($params['format']);
							 | 
						||
| 
								 | 
							
								        $qrCode->setMargin($params['padding']);
							 | 
						||
| 
								 | 
							
								        $qrCode->setEncoding('UTF-8');
							 | 
						||
| 
								 | 
							
								        $qrCode->setErrorCorrectionLevel(new ErrorCorrectionLevel($params['errorlevel']));
							 | 
						||
| 
								 | 
							
								        $qrCode->setForegroundColor($foregroundcolor);
							 | 
						||
| 
								 | 
							
								        $qrCode->setBackgroundColor($backgroundcolor);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 设置标签
							 | 
						||
| 
								 | 
							
								        if (isset($params['label']) && $params['label']) {
							 | 
						||
| 
								 | 
							
								            $qrCode->setLabel($params['label'], $params['labelfontsize'], $params['labelfontpath'], $params['labelalignment']);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 设置Logo
							 | 
						||
| 
								 | 
							
								        if (isset($params['logo']) && $params['logo']) {
							 | 
						||
| 
								 | 
							
								            $qrCode->setLogoPath($params['logopath']);
							 | 
						||
| 
								 | 
							
								            $qrCode->setLogoSize($params['logosize'], $params['logosize']);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $qrCode->setRoundBlockSize(true);
							 | 
						||
| 
								 | 
							
								        $qrCode->setValidateResult(false);
							 | 
						||
| 
								 | 
							
								        $qrCode->setWriterOptions(['exclude_xml_declaration' => true]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return $qrCode;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |