Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >php7高效生成二维码:composer和荷兰PHP开发者的QrCode

php7高效生成二维码:composer和荷兰PHP开发者的QrCode

原创
作者头像
V站CEO-西顾
发布于 2018-06-09 14:50:22
发布于 2018-06-09 14:50:22
2.7K00
代码可运行
举报
文章被收录于专栏:V站V站
运行总次数:0
代码可运行

QrCode的安装和使用

关于QrCode这个类库没必要详细介绍,基于php的GD库,用于生成任意尺寸的二维码,并且可以将logo水印也打上去,还可以在二维码图片下方加入文字。QrCode的项目地址:https://github.com/endroid/QrCode

在命令行下操作安装QrCode类:进入项目根目录或测试目录,执行composer安装命令,如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /wwwRoot/Blog/wwwRoot/project/qrcodecomposer require endroid/qrcode 

安装完毕该目录下会自动生成vendor目录和composer.jsoncomposer.lock文件,截图如下:

其中font目录是我后面加入的字体文件放置目录,index.php是本次测试调用入口文件。composer安装完毕,QrCode的类文件就按照composer的规则自动存放在vendor目录下了,打开vendor目录你会发现有个autoload.php文件和几个文件夹,这几个文件存放的就是各种类库文件了。vendor目录结构如下:

其中composer目录是composer这个工具所实现的php自动加载器,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直接调用就可以了,代码中会有一些解释,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php/** * php7下生成二维码 * `利用composer管理类` * @authors Jea杨 (JJonline@JJonline.Cn) * @date    2016-10-07 20:26:05 * @version 1.0 */error_reporting(0);//引入composer自动生成的类加载器require_once 'vendor/autoload.php';//命名空间方式调用QrCode类use Endroid\QrCode\QrCode as EndroidQrCode;//将QrCode命名空间腾出来 //处理需生成二维码的内容、参数和文字$data  = trim($_GET['data']) ? trim($_GET['data']) : 'http://blog.jjonline.cn/';$size  = intval($_GET['size']) > 1000 ? 1000 : intval($_GET['size']);$label = trim($_GET['label']) ? trim($_GET['label']) : null; $QrModel = new EndroidQrCode();##默认参数$QrModel->setText($data) //设置二维码上的内容        ->setPadding(5) //设置二维码内容距离图片边缘的便宜量,单位:像素px        ->setErrorCorrection('high') //设置二维码的纠错率,可以有low、medium、quartile、hign多个纠错率        ->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0)) //设置二维码的rgb颜色和透明度a,这里是黑色        ->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0)) //设置二维码图片的背景底色,这里是白色        ->setImageType(EndroidQrCode::IMAGE_TYPE_PNG);//设置输出的二维码图片格式,这里设置成png格式,还可以有gif、jpeg、wbmp###可能的指定生成的二维码尺寸,由get变量获取$size ? $QrModel->setSize(intval($size)) : $QrModel->setSize(190);###可能的指定二维码下方的文字,由get变量获取;写死15px的字体大小,方正静蕾简体手写体的字体$label && $QrModel->setLabelFontPath('./font/yaya.ttf')->setLabel($label)->setLabelFontSize(15); ###设置输出的header头:输出的内容是一张图片header('Content-Type: '.$QrModel->getContentType());##QrCode类的输出png图片数据的方法输出图片,这个时候使用浏览器访问这个Url将显示一张二维码图片$QrModel->render(); ###如果要加上logo水印,则在调用render方法之前调用setLogo和setLogoSize方法#这里就不调用了,写出示例/** * $QrModel->setLogo('./logo.png');//设置logo水印图片的路径,相对路径和绝对路径均可,这里`./logo.png`表示使用与本文件平级的logo.png * $QrModel->setLogoSize(48);//设置logo水印的大小,参数是一个int数字,单位px (注意:这里假设你的logo是一个正方形) *  * header('Content-Type: '.$QrModel->getContentType()); * $QrModel->render(); */ 

1、设置二维码的内容方法:setText,参数为需要写入到二维码图像中的文本内容,可以是任意文本,但不能超过二维码图像的信息容量

2、设置二维码尺寸的方法:setSize,参数为int型的数字,单位为像素px;注意实际图片大小还受到setPaddingsetLabelFontSize的影响

3、设置二维码距离边界的偏移量方法:setPadding,参数为int型的数字,单位为像素px

4、设置水印和水印尺寸的方法:setLogo方法指定水印图片的路径,也就是该方法的参数是水印图片的路径,可以是相对路径,也可以是绝对路径,以及setLogoSize方法设置水印图片尺寸大小,参数为int型的数字,单位为像素px,默认值为48,这个方法设置了水印图片在二维码图中的大小,并且假设了你的logo是个正方形,所以要留意参数范围。

5、设置label和label字体大小以及字体的方法:setLabelFontPath方法指定生成label文字的字体文件位置,参数是字体文件的路径、setLabel设置指定label的内容、setLabelFontSize设置生成的label字体的大小,参数为int型的数字,单位为像素px

6、如果生成的二维码图片不是输出到浏览器,需要保存到服务器中,使用save方法,参数是保存这张二维码图片的路径,相对路径和绝对路径均可

何为label?见上图,上图中晶晶的博客就是label,上图为了便于说明,我加上了1px绿色的边框。

何为二维码距离边界的偏移量?上图黑色二维图像边缘并不是靠近图片边界的,二维码图像距离图片边界的距离即为setPadding方法设置的偏移量,上图的setPadding值设置的5,也就是5像素。

代码中已有详细的注释和说明,就不再墨迹了,需要注意的是: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等。

-----

最后将本文的示例放在线上环境,url为:http://blog.jjonline.cn/project/qrcode/,你可以通过get变量data指定生成二维码的内容、size变量指定生成二维码的尺寸,最大1000px,以及label指定生成的label内容,例如:

http://blog.jjonline.cn/project/qrcode/?data=http://blog.jjonline.cn/&size=300&label=%E6%99%B6%E6%99%B6%E7%9A%84%E5%8D%9A%E5%AE%A2

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PHP生成二维码 endroid/qr-code 扩展包
https://packagist.org/packages/endroid/qr-code
很酷的站长
2023/02/17
1.2K0
PHP生成二维码 endroid/qr-code 扩展包
如何用PHP快速搭建二维码生成API(完整教程)
Q:为什么返回的是Base64而不是直接图片? A:便于API统一返回JSON格式,前端可直接用于img标签的src属性
云峥百宝箱
2025/04/16
1210
PHP引入endroid/qr-code类库生成指定二维码
我在项目开发中需要使用到的常见的一些类库,基本都是Packagist / Composer 中国全量镜像上找到,然后使用composer直接安装。
OwenZhang
2021/12/08
1.7K0
ThinkPHP生成二维码(可自定义设置LOGO)
基于ThinkPHP框架生成二维码,可自定义logo及其他参数,方法简单易懂,使用composer安装扩展类,区区数十行代码便可以实现功能。可以自定义二维码大小、写入文件的后缀名、二维码内容相对于整张图片的外边距、编码类型、容错率、前景色、背景色等参数。
申霖
2019/12/27
1.9K0
ThinkPHP生成二维码(可自定义设置LOGO)
PHP 使用phpqrcode生成二维码
今天要说的比较浅层一点,简单快速的生成一个有文字、链接内容的二维码;主要调用phpqrcode类,下载地址为: https://sourceforge.net/projects/phpqrcode
benny
2018/03/06
2.6K0
PHP 使用phpqrcode生成二维码
在TP中生成二维码图片出现乱码
1. 在TP生成二维码图片出现乱码问题 composer require endroid/qr-code <?php namespace app\index\controller; use Endr
很酷的站长
2023/02/16
4820
在TP中生成二维码图片出现乱码
Java生成艺术二维码也可以很简单
现在二维码可以说非常常见了,当然我们见得多的一般是白底黑块,有的再中间加一个 logo,或者将二维码嵌在一张特定的背景中(比如微信、支付宝的收款码);偶尔也可能看到一些酷炫的二维码,比如非黑白的、渐变色的、非方块样式的,或者说是动态的二维码
一灰灰blog
2019/11/14
3K0
phpqrcode生成二维码直接输出
首先去官网下载PHPqrCode库文件,只需要里面的phpqrcode.php文件,下载地址:http://phpqrcode.sourceforge.net
超级小可爱
2023/04/17
7560
PHP生成二维码
刚把手头的工作忙完.也是来总结下吧.这几天涉及到了一个需求.需要生成邀请一个二维码.
桑先生
2019/12/17
1.6K0
PHP QRCode 生成二维码
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/76640540
泥豆芽儿 MT
2018/09/11
4.4K0
PHP QRCode 生成二维码
php生成二维码
资料地址:https://download.csdn.net/download/tiaozhanji_xian/10450751
黄啊码
2020/05/29
1.1K0
C# 使用 ThoughtWorks.QRCode 生成二维码
二维码是用某种特定的几何图形按一定规律在平面分布的、黑白相间的、记录数据符号信息的图形,在应用程序开发中也被广泛使用,诸如信息获取(如关注微信公众号)、网站跳转(写入Url)、防伪查询(反馈查询结果)、手机支付(如微信支付、支付宝支付)、会员登录(扫码登录方式)等等。
初九之潜龙勿用
2024/06/20
3090
C# 使用 ThoughtWorks.QRCode 生成二维码
python之qrcode生成二维码
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100690.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/29
4900
python之qrcode生成二维码
详解 Python qrcode 二维码模块
1、version:控制二维码的大小,取值范围从1到40。取最小值1时,二维码大小为21*21。取值为 None (默认)或者使用fit=true参数(默认)时,二维码会自动调整大小。
小小科
2018/07/31
1.1K0
详解 Python qrcode 二维码模块
Vue生成二维码_视频生成二维码软件
vue有两种生成二维码的方式,qrcode、vue-qr(有icon);
全栈程序员站长
2022/11/09
8540
Vue生成二维码_视频生成二维码软件
分享一个.net 生成二维码的方法
最近项目中需要生成二维码,找了很多包,最好还是感觉QRCoder包最好用,下面发出来分享给大家。
用户4831957
2023/04/13
7870
php 识别二维码(转载)
最开始找的方法是一个叫 php-zbarcode 的扩展,自己照着网上的安装步骤安装了 ImageMagick 和 zbar ,但编译 php-zbarcode 时出错了,后来换成Center OS 系统还是出错,由于技术有限也就放弃了。
lin_zone
2018/08/15
4.4K0
Django中使用qrcode生成二维码
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
菲宇
2019/09/25
2K0
Django中使用qrcode生成二维码
PHP 使用endroid/qrcode 二维码生成, GD库生成分享海报
github地址:https://github.com/endroid/qr-code
IT工作者
2021/12/20
2.6K0
java 实现二维码生成工具类
二维码工具篇 利用google的开源库 zxing 来实现二维码的生成,并实际修复一些常见的问题 项目地址: http://git.oschina.net/liuyueyi/quicksilver 1. 设计思路 二维码生成,采用现在用得比较多的开源框架 Zxing 既然都不是自己来生成二维码了,为什么要做这个东西呢? 我要生成二维码直接用官方的api不就行了,你这个不是化蛇添足么!!! - 官方的接入比较麻烦,特别是你想定制生成个性化的二维码时,需要了解到zxing内部的一些设置参数,这个工具则降低了
一灰灰blog
2018/02/06
2.3K0
相关推荐
PHP生成二维码 endroid/qr-code 扩展包
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验