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 相关文章推荐
WINDOWS服务器安装多套PHP的另类解决方案
Oct 09 PHP
谈谈新手如何学习PHP 默默经典版本
Aug 04 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 PHP
PHP filter_var() 函数 Filter 函数
Apr 25 PHP
PHP递归调用的小技巧讲解
Feb 19 PHP
6种php上传图片重命名的方法实例
Nov 04 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
Apr 01 PHP
session 加入redis的实现代码
Jul 15 PHP
Laravel框架控制器的request与response用法示例
Sep 30 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
Oct 24 PHP
PHP常见的序列化与反序列化操作实例分析
Oct 28 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
Jul 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数据类型之布尔型的介绍
2013/04/28 PHP
php中hashtable实现示例分享
2014/02/13 PHP
php生成rss类用法实例
2015/04/14 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
js 处理数组重复元素示例代码
2013/12/27 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
微信小程序实现自动定位功能
2018/10/31 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
node.js使用fs读取文件出错的解决方案
2019/10/23 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
Python yield 小结和实例
2014/04/25 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
12岁生日感言
2014/01/21 职场文书
家居饰品店创业计划书
2014/01/31 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
维修工先进事迹
2014/05/29 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
python程序的组织结构详解
2021/12/06 Python