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入门速成(2)
Oct 09 PHP
Search File Contents PHP 搜索目录文本内容的代码
Feb 21 PHP
PHP删除非空目录的函数代码小结
Feb 28 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
Jun 10 PHP
php无限分类使用concat如何实现
Nov 05 PHP
php发送短信验证码完成注册功能
Nov 24 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
Mar 21 PHP
apache php mysql开发环境安装教程
Jul 28 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
Feb 08 PHP
简单谈谈PHP中的trait
Feb 25 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 22 PHP
PHP之多条件混合筛选功能的实现方法
Oct 09 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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
随机头像PHP版
2006/10/09 PHP
php批量删除数据
2007/01/18 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
JavaScript的继承的封装介绍
2013/10/15 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
python写一个md5解密器示例
2018/02/23 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
Django 内置权限扩展案例详解
2019/03/04 Python
Python按钮的响应事件详解
2019/03/04 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
python视频按帧截取图片工具
2019/07/23 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
python科学计算之narray对象用法
2019/11/25 Python
谈谈python垃圾回收机制
2020/09/27 Python
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
学校春季防火方案
2014/06/08 职场文书
教育教学工作反思
2016/02/24 职场文书
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
2021/03/31 Servers
Python中基础数据类型 set集合知识点总结
2021/08/02 Python