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 相关文章推荐
一个程序下载的管理程序(三)
Oct 09 PHP
第三节--定义一个类
Nov 16 PHP
PHP文件操作实现代码分享
Sep 01 PHP
eaglephp使用微信api接口开发微信框架
Jan 09 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
Feb 12 PHP
详解PHP实现执行定时任务
Dec 21 PHP
PHPStorm+XDebug进行调试图文教程
Jun 13 PHP
PHP面试常用算法(推荐)
Jul 22 PHP
详解PHP原生DOM对象操作XML的方法
Oct 17 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
thinkphp5使用无限极分类
Feb 18 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 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
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
2012/05/29 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
Javascript Function.prototype.bind详细分析
2016/12/29 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
Vue自定义弹窗指令的实现代码
2018/08/13 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
ajax与jsonp的区别及用法
2018/10/16 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
wxPython学习之主框架实例
2014/09/28 Python
用Python配平化学方程式的方法
2019/07/20 Python
详解python中的异常捕获
2020/12/15 Python
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
小学三年级数学教学反思
2014/01/31 职场文书
粗加工管理制度
2014/02/04 职场文书
新农村建设标语
2014/06/24 职场文书
如何利用pygame实现打飞机小游戏
2021/05/30 Python
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android