在 Laravel 5 中通过 Simple QrCode 扩展包生成二维码详解
1、简介
Simple Qrcode 是 Bacon/BaconQrCode 针对 Laravel 框架的封装版本,用于在 Laravel 中为生成二维码提供接口。
2、安装&配置
在项目根目录下使用如下命令安装依赖包:
composer require simplesoftwareio/simple-qrcode 1.3.*
在 config/app.php
注册服务提供者:
SimpleSoftwareIOQrCodeQrCodeServiceProvider::class
同样在 config/app.php
添加 QrCode
门面:
"QrCode" => SimpleSoftwareIOQrCodeFacadesQrCode::class
3、快速上手
在视图中打印
<div class="visible-print text-center"> {!! QrCode::size(100)->generate(Request::url()); !!} <p>Scan me to return to the original page.</p> </div>
嵌入到邮件内容
<img src="{!!$message->embedData(QrCode::format("png")->generate("Embed me into an e-mail!"), "QrCode.png", "image/png")!!}">
4、基本用法
基本使用
Qrcode 生成器用法很简单,最基本的语法如下:
QrCode::generate("Hello,LaravelAcademy!");
这将会生成一个二维码,用手机扫描该二维码将会跳转到一个显示“Hello,LaravelAcademy!”的页面。
如果想要显示中文,需要使用如下方式指定编码:
QrCode::encoding("UTF-8")->generate("你好,Laravel学院!");
generate()
方法用于生产二维码图片,默认情况下,返回一个 SVG 格式的图片字符串,在视图中我们可以可以通过如下方式将其打印出来:
{!! QrCode::generate("Hello,LaravelAcademy!"); !!}
此外,generate()
方法还可以接受第二个参数用于指定文件名以及保存路径:
if(!file_exists(public_path("qrcodes"))) mkdir(public_path("qrcodes")); QrCode::generate("Hello,LaravelAcademy!", public_path("qrcodes/qrcode.svg"));
这样生成的 SVG 文件会保存到 /public/qrcodes/qrcode.svg
。
修改保存格式
前面我们说了,QrCode 默认生成 SVG 格式文件,当然,我们可以修改保存格式,目前 Simple QrCode 支持三种格式:PNG、SVG
和 RPS。要修改生成二维码图片格式,可以使用 format()
方法:
QrCode::format("png")->generate("Hello,LaravelAcademy!",public_path("qrcodes/qrcode.png"));
这样会在 /public/qrcodes
目录下生成 qrcode.png
图片。要生成其它格式,将对应格式传入 format()
方法即可。
注:
format()
方法必须在所有其它格式化方法之前调用,这些格式化方法包括size
、color
、backgroundColor
和margin
。
修改二维码图片尺寸
QrCode 生成器默认返回最小尺寸二维码图片。如果要修改生成二维码图片尺寸,可以使用 size()
方法:
QrCode::format("png")->size(100)->generate("Hello,LaravelAcademy!",public_path("qrcodes/qrcode.png"));
这样会生成一个宽高均为100像素的二维码图片:
修改颜色(前景色/背景色)
我们还可以通过 color()
方法来修改生成二维码图片的颜色,颜色参数以
RGB 格式表示:
QrCode::format("png")->size(100)->color(255,0,255)->generate("Hello,LaravelAcademy!",public_path("qrcodes/qrcode.png"));
生成的二维码图片如下:
此外,还可以使用 backgroundColor()
方法修改背景色:
QrCode::format("png")->size(100)->color(255,0,255)->backgroundColor(255,255,0)->generate("Hello,LaravelAcademy!",public_path("qrcodes/qrcode.png"));
生成的二维码图片如下:
修改边距
如果你想要修改二维码图片与最外层容器边框的距离,可以使用 margin()
方法:
QrCode::format("png")->size(100)->color(255,0,255)->backgroundColor(255,255,0)->margin(100)->generate("Hello,LaravelAcademy!",public_path("qrcodes/qrcode.png"));
生成的二维码图片如下:
支持编码
关于编码问题我们前面已经提到过,即使用 encoding()
方法设置当前编码,QrCode
默认编码为 ISO-8859-1
,目前支持如下编码:
字符编码 |
---|
ISO-8859-1 |
ISO-8859-2 |
ISO-8859-3 |
ISO-8859-4 |
ISO-8859-5 |
ISO-8859-6 |
ISO-8859-7 |
ISO-8859-8 |
ISO-8859-9 |
ISO-8859-10 |
ISO-8859-11 |
ISO-8859-12 |
ISO-8859-13 |
ISO-8859-14 |
ISO-8859-15 |
ISO-8859-16 |
SHIFT-JIS |
WINDOWS-1250 |
WINDOWS-1251 |
WINDOWS-1252 |
WINDOWS-1256 |
UTF-16BE |
UTF-8 |
ASCII |
GBK |
EUC-KR |
如果在生成二维码过程中报错:
Could not encode content to ISO-8859-1
这就意味着你需要修改编码了。
合并水印图片到二维码
我们有时候需要将 Logo 或者头像放到二维码图片上,这可以通过 merge()
方法实现:
QrCode::format("png")->size(200)->merge("/public/qrcodes/laravel.png",.15)->generate("LaravelAcademy",public_path("qrcodes/qrcode.png"));
merge()
的第一个参数是水印图片(Logo或头像)的相对路径(相对于项目根目录),第二个参数表示所占百分比。上述生成的二维码图片如下:
注:目前
merge()
方法只支持 PNG 格式二维码图片。
5、辅助函数
我们平时用到的二维码不仅仅是显示文字,而是拥有很多额外功能,比如跳转链接、支付、下载、关注等等,这些功能可以通过 QrCode 提供的辅助函数来实现。
邮件
email()
函数可以用于生产邮件二维码,
我们可以传递邮箱地址、主题和内容到该函数:
QrCode::email("yaojinbu@163.com","测试邮件","通过二维码发送图片");
生成的二维码包含 mailto 信息。
Geo
geo()
函数可以生成手机可以读取并在
Google 地图或类似应用中定位的经度和纬度信息:
QrCode::geo(37.822214, -122.481769);
电话/手机号码
phoneNumber()
函数可以生成一个包含手机/手机号码信息的二维码图片:
QrCode::phoneNumber("18888888888");
短信(SMS)
SMS()
辅助函数可生成包括收件人和信息的短信二维码:
QrCode::encoding("UTF-8")->SMS("18888888888","Laravel学院致力于提供优质Laravel中文学习资源");
更多用法
此外,你还可以通过在传入 generate()
方法的第一个字符串参数前添加如下前缀以生成对应二维码:
使用 | 前缀 | 示例 |
---|---|---|
Website URL | http:// | http://www.simplesoftware.io |
Secured URL | https:// | https://www.simplesoftware.io |
E-mail Address | mailto: | mailto:support@simplesoftware.io |
Phone Number | tel: | tel:555-555-5555 |
Text (SMS) | sms: | sms:555-555-5555 |
Text (SMS) With Pretyped Message | sms: | sms::I am a pretyped message |
Text (SMS) With Pretyped Message and Number | sms: | sms:555-555-5555:I am a pretyped message |
Geo Address | geo: | geo:-78.400364,-85.916993 |
MeCard | mecard: | MECARD:Simple, Software;Some Address, Somewhere, 20430;TEL:555-555-5555;EMAIL:support@simplesoftware.io; |
VCard | BEGIN:VCARD | See Examples |
Wifi | wifi: | wifi:WEP/WPA;SSID;PSK;Hidden(True/False) |
比如,要生成链接二维码,可以通过如下方式(我们还修改尺寸以方便扫描):
QrCode::size(200)->generate("http://laravelacademy.org");
扫描生成的二维码图片,页面会跳转到 http://laravelacademy.org。
6、在 Laravel 之外使用
你还可以在 Laravel 之外使用 Simple QrCode:
use SimpleSoftwareIOQrCodeBaconQrCodeGenerator; $qrcode = new BaconQrCodeGenerator; $qrcode->size(500)->generate("Welcome to LaravelAcademy!");
- 上一篇: php实现微信推广海报代码示例
- 下一篇:没有了