<?php
namespace base;
use app\service\ResourcesService;
use app\service\SystemBaseService;
* 二维码驱动
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-01T21:51:08+0800
*/
class Qrcode
{
private $config;
* 构造方法
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @param [array] $params [输入参数]
* @datetime 2019-04-16T21:13:10+0800
*/
public function __construct($params = [])
{
require_once ROOT.'extend'.DS.'qrcode'.DS.'phpqrcode.php';
$this->config['root_path'] = isset($params['root_path']) ? $params['root_path'] : ROOT.'public';
$this->config['path'] = isset($params['path']) ? $params['path'] : DS.'static'.DS.'upload'.DS.'images'.DS.'qrcode'.DS.date('Y').DS.date('m').DS.date('d').DS;
}
* 二维码展示
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-04-16T21:13:16+0800
* @param [array] $params [输入参数]
*/
public function View($params = [])
{
$level = isset($params['level']) && in_array($params['level'], array('L','M','Q','H')) ? $params['level'] : 'L';
$point_size = isset($params['size']) ? min(max(intval($params['size']), 1), 30) : 6;
$mr = isset($params['mr']) ? intval($params['mr']) : 1;
$content = isset($params['content']) ? base64_decode(urldecode(trim($params['content']))) : __MY_URL__;
if(ob_get_length() > 0)
{
ob_clean();
}
\QRcode::png($content, false, $level, $point_size, $mr);
die;
}
* 二维码创建
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2019-04-19
* @desc description
* @param [array] $params [输入参数]
*/
public function Create($params = [])
{
if(empty($params['content']))
{
return DataReturn(MyLang('common_extend.base.qrcode.content_empty_tips'), -1);
}
if(!empty($params['root_path']))
{
$this->config['root_path'] = $params['root_path'];
}
if(!empty($params['path']))
{
$this->config['path'] = $params['path'];
}
$dir = str_replace(['//', '\\\\'], ['/', '\\'], $this->config['root_path'].$this->config['path']);
$ret = $this->IsMkdir($dir);
if($ret['code'] != 0)
{
return $ret;
}
$filename = empty($params['filename']) ? $this->RandNewFilename().'.png' : $params['filename'];
if(!file_exists($dir.$filename) || (isset($params['is_force']) && $params['is_force'] == 1))
{
$level = isset($params['level']) && in_array($params['level'], array('L','M','Q','H')) ? $params['level'] : 'L';
$point_size = isset($params['size']) ? min(max(intval($params['size']), 1), 30) : 10;
$mr = isset($params['mr']) ? intval($params['mr']) : 2;
\QRcode::png($params['content'], $dir.$filename, $level, $point_size, $mr);
if(!file_exists($dir.$filename))
{
return DataReturn(MyLang('common_extend.base.qrcode.qrcode_create_fail_tips'), -100);
}
if(!empty($params['logo']))
{
$logo = @file_get_contents($params['logo']);
if($logo !== false)
{
$qr = imagecreatefromstring(file_get_contents($dir.$filename));
$logo = imagecreatefromstring($logo);
$qr_width = intval(imagesx($qr));
$qr_height = intval(imagesy($qr));
$logo_width = intval(imagesx($logo));
$logo_height = intval(imagesy($logo));
$logo_qr_width = intval($qr_width / 5);
$scale = intval($logo_width/$logo_qr_width);
$logo_qr_height = intval($logo_height/$scale);
$from_width = intval(($qr_width - $logo_qr_width) / 2);
imagecopyresampled($qr, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
imagepng($qr, $dir.$filename);
imagedestroy($qr);
imagedestroy($logo);
}
}
}
$result = [
'dir' => $dir.$filename,
'root' => $this->config['root_path'],
'path' => $this->config['path'],
'filename' => $filename,
'url' => ResourcesService::AttachmentPathViewHandle($this->config['path'].$filename),
];
return DataReturn(MyLang('operate_success'), 0, $result);
}
* 二维码下载
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @datetime 2019-04-16T21:23:01+0800
* @param [array] $params [输入参数]
*/
public function Download($params = [])
{
$url_param = empty($params['url']) ? '' : base64_decode(urldecode($params['url']));
if(empty($url_param))
{
return DataReturn(MyLang('common_extend.base.qrcode.url_empty_tips'), -1);
}
$file = AttachmentPublicDownloadRealpath($url_param);
if($file === false)
{
return DataReturn(MyLang('common_extend.base.qrcode.url_illegal_tips'), -1);
}
$ext_arr = MyConfig('ueditor.imageManagerAllowFiles');
$dot_ext = '.'.strtolower(pathinfo($file, PATHINFO_EXTENSION));
if(!in_array($dot_ext, $ext_arr))
{
return DataReturn(MyLang('common_extend.base.qrcode.images_url_invalid_tips'), -1);
}
$filename = empty($params['filename']) ? date('YmdHis').GetNumberCode().'.png' : $params['filename'].'.png';
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private',false);
header('Content-Type: application/octet-stream;charset=utf-8');
header('Content-Type: application/download');
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Transfer-Encoding: binary');
header('Connection: close');
echo RequestGet($file);
}
* 生成新的文件名称
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-06-29
* @desc description
* @return [string] [文件名称]
*/
private function RandNewFilename()
{
return date('YmdHis').rand(0,9).rand(0,9).rand(0,9).rand(0,9).rand(0,9);
}
* 路径不存在则创建
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2018-06-29
* @desc description
* @param [string] $dir [文件路径]
*/
private function IsMkdir($dir)
{
if(!is_dir($dir))
{
if(mkdir($dir, 0777, true) === false)
{
return DataReturn(MyLang('common_extend.base.qrcode.dir_create_fail_tips'), -1);
}
}
return DataReturn(MyLang('operate_success'), 0);
}
}
?>