PHP 自定义二维码生成
环境:PHP 7.*.* ,Composer 包管理工具、QrCode
效果如下:

使用 Composer 安装 QrCode
QrCode 类库基于 php 的 GD 库,用于生成任意尺寸的二维码,并且可以将 logo 水印也打上去,还可以在二维码图片下方加入文字。
QrCode 的项目地址:https://github.com/endroid/QrCode
在命令行下操作安装QrCode类:在 composer.json 中添加 qrcode,执行 composer 更新命令,如下

php composer.phar update
安装成功后会出现两个目录 endroid、symfony,
endroid 目录就是本次 QrCode 的类库文件了,
而 symfony 目录则是 endroid 依赖的另外一个php类库,安装QrCode库时symfony会自动安装,不用手动处理依赖关系。
而autoload.php文件则是composer自动为我们处理好的php类加载器,我们要调用由composer安装的某个类时,引用这个文件即可,不用再去include一堆文件了,这就是命名空间与文件存储路径按一定规则一一对应,并利用php的spl_autoload_register函数实现的自动加载机制实现各个类的自动加载功能,所以我们要调用由composer安装的类时只需要引入autoload.php这个加载器文件就可以了。如果我们自己的项目也有自动加载器也并不影响,这就是spl_autoload_register这个函数的好处了,可以存在多个加载器。

QrCode调用的代码示例:
新建一个 index.php 直接调用就可以了,代码中会有一些解释,代码如下:
<?php
/**
* php7下生成二维码
* `利用composer管理类`
* @authors Ryan Zheng
* @date 2018-11-25 23:54:05
* @version 1.1
*/
error_reporting();
//引入composer自动生成的类加载器
require_once 'vendor/autoload.php';
//命名空间方式调用QrCode类
use Endroid\QrCode\QrCode as EndroidQrCode;//将QrCode命名空间腾出来 //处理需生成二维码的内容、参数和文字
// $data = trim($_GET['data']) ? trim($_GET['data']) : 'http://www.cnblogs.com/ryanzheng';
$data = trim($_GET['data']) ? trim($_GET['data']) : 'https://google.com';
$size = intval($_GET['size']) > ? : intval($_GET['size']);
$label = trim($_GET['label']) ? trim($_GET['label']) : null; $QrModel = new EndroidQrCode();
##默认参数
$QrModel->setText($data) //设置二维码上的内容
->setPadding() //设置二维码内容距离图片边缘的便宜量,单位:像素px
->setErrorCorrection('high') //设置二维码的纠错率,可以有low、medium、quartile、hign多个纠错率
->setForegroundColor(array('r' => , 'g' => , 'b' => , 'a' => )) //设置二维码的rgb颜色和透明度a,这里是黑色
->setBackgroundColor(array('r' => , 'g' => , 'b' => , 'a' => )) //设置二维码图片的背景底色,这里是白色
->setImageType(EndroidQrCode::IMAGE_TYPE_PNG);//设置输出的二维码图片格式,这里设置成png格式,还可以有gif、jpeg、wbmp
###可能的指定生成的二维码尺寸,由get变量获取
$size ? $QrModel->setSize(intval($size)) : $QrModel->setSize();
###可能的指定二维码下方的文字,由get变量获取;写死15px的字体大小,方正静蕾简体手写体的字体
$label && $QrModel->setLabelFontPath('./font/yaya.ttf')->setLabel($label)->setLabelFontSize();
###设置输出的header头:输出的内容是一张图片
// header('Content-Type: '.$QrModel->getContentType());
##QrCode类的输出png图片数据的方法输出图片,这个时候使用浏览器访问这个Url将显示一张二维码图片
// $QrModel->render(); ###如果要加上logo水印,则在调用render方法之前调用setLogo和setLogoSize方法
$QrModel->setLogo('./ryan.jpg');//设置logo水印图片的路径,相对路径和绝对路径均可,这里`./logo.png`表示使用与本文件平级的logo.png
$QrModel->setLogoSize();//设置logo水印的大小,参数是一个int数字,单位px (注意:这里假设你的logo是一个正方形) header('Content-Type: '.$QrModel->getContentType());
$QrModel->render();
1、设置二维码的内容方法:setText,参数为需要写入到二维码图像中的文本内容,可以是任意文本,但不能超过二维码图像的信息容量
2、设置二维码尺寸的方法:setSize,参数为int型的数字,单位为像素px;注意实际图片大小还受到setPadding和setLabelFontSize的影响
3、设置二维码距离边界的偏移量方法:setPadding,参数为int型的数字,单位为像素px
4、设置水印和水印尺寸的方法:setLogo方法指定水印图片的路径,也就是该方法的参数是水印图片的路径,可以是相对路径,也可以是绝对路径,以及setLogoSize方法设置水印图片尺寸大小,参数为int型的数字,单位为像素px,默认值为48,这个方法设置了水印图片在二维码图中的大小,并且假设了你的logo是个正方形,所以要留意参数范围。
5、设置label和label字体大小以及字体的方法:setLabelFontPath方法指定生成label文字的字体文件位置,参数是字体文件的路径、setLabel设置指定label的内容、setLabelFontSize设置生成的label字体的大小,参数为int型的数字,单位为像素px
6、如果生成的二维码图片不是输出到浏览器,需要保存到服务器中,使用save方法,参数是保存这张二维码图片的路径,相对路径和绝对路径均可。
需要注意的是:composer需要php5.3.2以上的php环境,本次试验环境是php7.0.11,QrCode支持链式调用,所以写法上要能理解。
几个留意点
1、QrCode生成中文汉字的label的问题:需要引入中文字体,所以需要调用setLabelFontPath方法传入一个中文字体的路径,QrCode默认提供有一个字体为opensans.ttf,在\vendor\endroid\qrcode\assets\font路径下,但QrCode类并未默认调用这个字体,若不调用setLabelFontPath方法设置字体的话,生成中文的label会是小方框。另外需要使用UTF8编码的中文设置label
2、GD库编译参数的影响:当编译php时加上了–enable-gd-jis-conv参数的话,也就是让php的GD库支持日文编码的字库;简单点来说:开启了这个选项的话GD就会把TTF字库中大于127的部分(即不属于标准拉丁文字库的部分)按照日文JIS的顺序来映射,那么用来映射中文字体的时候自然就变成乱码了。如果你的php开启了–enable-gd-jis-conv选项,设置中文label时纵使你传入的是utf8编码的也会出现乱码错误,原因前述已解释。考虑到国内制作图片时需要支持鬼子文字的情况较少,建议编译php时去除–enable-gd-jis-conv选项。
3、若调用QrCode代码生成二维码出现错误,请检查你的php版本,还有GD库编译参数:譬如是否支持png、jpeg、gif、wbmp等。
以上代码可以到我的 github 直接下载使用(好用的话记得给个 star):
https://github.com/zhengjianhong001/QR-code-generation
PHP 自定义二维码生成的更多相关文章
- Android生成自定义二维码
前面说过两种二维码扫描方式,现在说如何生成自定义酷炫二维码.二维码生成需要使用Google开源库Zxing,Zxing的项目地址:https://github.com/ZBar/ZBar,我们只需要里 ...
- jquery-qrcode客户端二维码生成类库扩展--融入自定义Logo图片
年后换了部门,现在主要的职责就是在网上卖精油,似乎这个就是传说中的网络营销. 跟着公司的MM们也了解不了少关于网络营销的知识,间接的了解到马云和刘强东都是些怎样龌龊的人,尽管之前也这样认为. 淘宝就不 ...
- [开源]C#二维码生成解析工具,可添加自定义Logo
二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字 ...
- Android 二维码 生成和识别(附Demo源码)
今天讲一下目前移动领域很常用的技术——二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS. Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技 ...
- Chrome浏览器二维码生成插件
猛击就可以使用啦->>>猛击使用 源码如下: 源码打包 源码: jquery-2.1.3.min.js jquery.qrcode.min.js https://gith ...
- Android 二维码 生成和识别(转)
原博客地址 :http://www.cnblogs.com/weixing/archive/2013/08/28/3287120.html 还有几个写的也可以参考一下:http://www.itnos ...
- android 二维码生成+扫描
android 二维码生成+扫描 1.在Android应用当中,很多时候都要用到二维码扫描,来避免让用户手动输入的麻烦. Google官方自己推出了一个二维码开源项目:ZXing库. 2.这里简单介绍 ...
- 【转】Android 二维码 生成和识别(附Demo源码)--不错
原文网址:http://www.cnblogs.com/mythou/p/3280023.html 今天讲一下目前移动领域很常用的技术——二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS. ...
- [开源]C#二维码生成解析工具,可添加自定义Logo (转)
二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字 ...
随机推荐
- BZOJ 1229: [USACO2008 Nov]toy 玩具
BZOJ 1229: [USACO2008 Nov]toy 玩具 标签(空格分隔): OI-BZOJ OI-三分 OI-双端队列 OI-贪心 Time Limit: 10 Sec Memory Lim ...
- 浏览器 DNS缓存与DNS prefetch (DNS预解析)
浏览器 DNS缓存 浏览器DNS缓存的时间跟DNS服务器返回的TTL值无关. 注:TTL(Time-To-Live),就是一条域名解析记录在DNS服务器中的存留时间. 浏览器在获取网站域名的实际IP地 ...
- day1总结
print("hello world") name='王维是傻屌' print(name) age_of_王维是傻屌 = 18 # type:用于判断变量的类型 str1 ='he ...
- 洛谷P1220 关路灯【区间dp】
题目:https://www.luogu.org/problemnew/show/P1220 题意:给定n盏灯的位置和功率,初始时站在第c盏处. 关灯不需要时间,走的速度是1单位/秒.问把所有的灯关掉 ...
- How to save console output to a file in Eclipse
https://coderanch.com/t/278299/java/Writing-output-console-file-system File file = new File("te ...
- Cannot read property 'tap' of undefined
E:\vue-project\vue-element-admin-master>npm run build:prod vue-element-admin@3.8.1 build:prod E:\ ...
- 对比传统方式访问数据库和SpringData访问数据库
我们在写代码的时候应该一边写一边测试,这样的话可以尽快的找到错误,在代码写多了之后去找错误的话不容易给错误定位 传统方式访问数据库 1:创建一个Maven web项目 2:修改pom.xml为以下内容 ...
- 大数据的存储——HBase、HIVE、MYSQL数据库学习笔记
HBase 1.hbase为查询而生,它通过组织机器的内存,提供一个超大的内存hash表,它需要组织自己的数据结构,表在hbase中是物理表,而不是逻辑表,搜索引擎用它来存储索引,以满足实时查询的需求 ...
- PHP递归排序怎么实现的?
递归算法对于任何一个编程人员来说,应该都不陌生.因为递归这个概念,无论是在PHP语言还是Java等其他编程语言中,都是大多数算法的灵魂. 对于PHP新手来说,递归算法的实现原理可能不容易理解.但是 ...
- php扩展开发-函数
我们首先找到快速上手文章里面关于函数定义的代码,以此说明然后开发PHP的函数 //php_myext.h PHP_FUNCTION(myext_hello);//函数申明,所有在myext.c文件定义 ...