在 Laravel 5 中通过 Simple QrCode 扩展包生成二维码详解

1、简介

Simple Qrcode 是 Bacon/BaconQrCode 针对 Laravel 框架的封装版本,用于在 Laravel 中为生成二维码提供接口。

2、安装&配置

在项目根目录下使用如下命令安装依赖包:

composer require simplesoftwareio/simple-qrcode 1.3.*

config/app.php 注册服务提供者:

SimpleSoftwareIO\QrCode\QrCodeServiceProvider::class

同样在 config/app.php 添加 QrCode 门面:

'QrCode' => SimpleSoftwareIO\QrCode\Facades\QrCode::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() 方法必须在所有其它格式化方法之前调用,这些格式化方法包括 sizecolorbackgroundColormargin

修改二维码图片尺寸

QrCode 生成器默认返回最小尺寸二维码图片。如果要修改生成二维码图片尺寸,可以使用 size() 方法:

QrCode::format('png')->size(100)->generate('Hello,LaravelAcademy!',public_path('qrcodes/qrcode.png'));

这样会生成一个宽高均为100像素的二维码图片:


在Laravel中使用Simple Qrcode生成二维码

修改颜色(前景色/背景色)

我们还可以通过 color() 方法来修改生成二维码图片的颜色,颜色参数以 RGB 格式表示:

QrCode::format('png')->size(100)->color(255,0,255)->generate('Hello,LaravelAcademy!',public_path('qrcodes/qrcode.png'));

生成的二维码图片如下:


在Laravel中使用Simple Qrcode生成二维码

此外,还可以使用 backgroundColor() 方法修改背景色:

QrCode::format('png')->size(100)->color(255,0,255)->backgroundColor(255,255,0)->generate('Hello,LaravelAcademy!',public_path('qrcodes/qrcode.png'));

生成的二维码图片如下:


在Laravel中使用Simple Qrcode生成二维码

修改边距

如果你想要修改二维码图片与最外层容器边框的距离,可以使用 margin() 方法:

QrCode::format('png')->size(100)->color(255,0,255)->backgroundColor(255,255,0)->margin(100)->generate('Hello,LaravelAcademy!',public_path('qrcodes/qrcode.png'));

生成的二维码图片如下:


在Laravel中使用Simple Qrcode生成二维码

支持编码

关于编码问题我们前面已经提到过,即使用 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或头像)的相对路径(相对于项目根目录),第二个参数表示所占百分比。上述生成的二维码图片如下:

在Laravel中使用Simple Qrcode生成二维码

注:目前 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 SimpleSoftwareIO\QrCode\BaconQrCodeGenerator;

$qrcode = new BaconQrCodeGenerator;
$qrcode->size(500)->generate('Welcome to LaravelAcademy!');

文章来源:https://laravelacademy.org/post/2605.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,113评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,644评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,340评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,449评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,445评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,166评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,442评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,105评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,601评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,066评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,161评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,792评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,351评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,352评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,584评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,618评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,916评论 2 344