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 日期加减的类,很不错
Oct 10 PHP
php函数的常用方法及注意之处小结
Jul 10 PHP
浅析PHP中Collection 类的设计
Jun 21 PHP
php 批量替换程序的具体实现代码
Oct 04 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
PHPMailer发送HTML内容、带附件的邮件实例
Jul 01 PHP
ThinkPHP文件上传实例教程
Aug 22 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
Python中使用django form表单验证的方法
Jan 16 PHP
PHP实现webshell扫描文件木马的方法
Jul 31 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
postman的安装与使用方法(模拟Get和Post请求)
Aug 06 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代码
2008/04/09 PHP
php轻松实现文件上传功能
2016/03/03 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
学习ExtJS border布局
2009/10/08 Javascript
javascript 读取XML数据,在页面中展现、编辑、保存的实现
2009/10/27 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
jQuery实现简单的日期输入格式化控件
2015/03/12 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
简单了解Python读取大文件代码实例
2019/12/18 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
有个性的自我评价范文
2013/11/15 职场文书
2015年民兵整组工作总结
2015/07/24 职场文书
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android