php生成带logo二维码方法小结


Posted in PHP onApril 08, 2016

一、使用的类库

1、phpqrcode(php库)

2、qrcode.js(javascript库)

二、phpqrcode的使用

只用php的类库,也就是二维码的生成在后台操作。因为要在后台生成带logo的二维码,那么首先必须将logo图片上传至服务器(在上传这里我用了webuploader)

phpqrcode使用方法:

首先下载phpqrcode:http://phpqrcode.sourceforge.net/

然后在使用之前记得引入phpqrcode.php文件

$value = $url;//二维码内容 
$errorCorrectionLevel = 'L';//设置容错级别 
$matrixPointSize = $size;//生成图片大小 
QRcode::png($value, 'public_files'.DIRECTORY_SEPARATOR .'code'.DIRECTORY_SEPARATOR .'qrcode.png', $errorCorrectionLevel, $matrixPointSize, 2);//生成二维码图片 无logo
$logo = $tar_path;//上传至服务器的logo图片 
$QR = 'public_files'.DIRECTORY_SEPARATOR .'code'.DIRECTORY_SEPARATOR .'qrcode.png';//已经生成的原始二维码图
 
if ($logo !== FALSE) {
  $QR = imagecreatefromstring(file_get_contents($QR));
  $logo = imagecreatefromstring(file_get_contents($logo));
  $QR_width = imagesx($QR);//二维码图片宽度
  $QR_height = imagesy($QR);//二维码图片高度
  $logo_width = imagesx($logo);//logo图片宽度
  $logo_height = imagesy($logo);//logo图片高度
  $logo_qr_width = $QR_width / 5;
  $scale = $logo_width/$logo_qr_width;
  $logo_qr_height = $logo_height/$scale;
  $from_width = ($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);
}
$name = time();
imagepng($QR, 'public_files'.DIRECTORY_SEPARATOR .'code'.DIRECTORY_SEPARATOR .$name.'.png');//输出带logo的二维码图片

三、qrcode.js的使用

使用qrcode.js在前端直接生成二维码,首先需要下载jquery.qrcode.js

qrcode的使用也很简单:

var length = size*80;//设置二维码大小
length = parseInt(length);
$("#code_img").qrcode({ //code_img是一个img标签的id
  render : "canvas",  //设置渲染方式,有table和canvas,使用canvas方式渲染性能相对来说比较好
  text : url,  //扫描二维码后显示的内容,可以直接填一个网址,扫描二维码后自动跳向该链接
  width : length,       //二维码的宽度
  height : length,
  background : "#ffffff",    //二维码的后景色
  foreground : "#000000",    //二维码的前景色
  src: $('#image').attr('src')       //二维码中间的图片
});

引入jquery.qrcode.js后再自己编写这段js代码,执行后二维码就可以显示处理了

主要是二维码中间的logo引用格式,一般取本地图片有两种格式:一种是本地URL,另一种是将图片转成base64格式

一开始我试用本地URL的格式来引用图片,发现只能引用与js文件统一目录下的图片,所以本地URL格式并不支持,于是我采用了后一种方式。

<input accept="image/*" type="file" id="file_input">

来上传选取本地图片,然后取其base64格式

var input = document.getElementById("file_input");
 
if(typeof FileReader==='undefined'){
  input.setAttribute('disabled','disabled');
}else{
  input.addEventListener('change',readFile,false);
}
 
function readFile(){
  var file = this.files[0];
  if(!/image\/\w+/.test(file.type)){
    alert("文件必须为图片!");
    return false;
  }
  var reader = new FileReader();
  reader.readAsDataURL(file);
  reader.onload = function(e){
    $('#image').attr('src',this.result);//image为img标签的id
  }
}

将文件读取为一串Data URL字符串,将小文件以一种特殊格式的URL地址直接读入页面。这个特殊格式就是base64

三、两个类库之间的对比

两个类库,一个在后台操作,一个直接在前端操作。

phpqrcode 生成二维码在后台操作,生成的图片保存在服务器。一般生成二维码都是直接保存到本地然后直接使用,很少会去服务器二次获取,所以采用phpqrcode的 话会使得服务器中的图片堆积,占用了不必要的空间,删除的话也会花费多余的开销。所以使用phpqrcode不适用于这种二维码生成工具。而且上传图片也 会产生多余的开销

qrcode.js直接在前端操作,上传图片直接保存在浏览器,直接在前端生成二维码,不需要任何后台的干涉,这样减少了不必要的开销,也不会在服务器造成图片的堆积而占用不必要的空间。

PHP 相关文章推荐
php 过滤器实现代码
Aug 09 PHP
PHP判断远程url是否有效的几种方法小结
Oct 08 PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
php抽奖小程序的实现代码
Jun 18 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
PHP编译安装中遇到的两个错误和解决方法
Aug 20 PHP
yii实现图片上传及缩略图生成的方法
Dec 04 PHP
php结合正则获取字符串中数字
Jun 19 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
Jun 23 PHP
php 修改上传文件大小限制实例详解
Oct 23 PHP
PHP最常用的正则表达式
Feb 13 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 #PHP
PHP中__autoload和Smarty冲突的简单解决方法
Apr 08 #PHP
初识ThinkPHP控制器
Apr 07 #PHP
PHP中PDO的事务处理分析
Apr 07 #PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 #PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 #PHP
PHP的PDO常用类库实例分析
Apr 07 #PHP
You might like
php 执行系统命令的方法
2009/07/07 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python操作gmail实例
2015/01/14 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
Django重设Admin密码过程解析
2020/02/10 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
如何完美的建立一个python项目
2020/10/09 Python
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
亚洲最大旅游体验平台:KKday
2017/10/21 全球购物
干部考核评语
2014/04/29 职场文书
119消防日活动总结
2014/08/29 职场文书
javascript canvas实现雨滴效果
2021/06/09 Javascript
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
宝塔更新Python及Flask项目的部署
2022/04/11 Python
Python Matplotlib绘制动画的代码详解
2022/05/30 Python