管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:9 {$ P }9 v9 N' u
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
- k& @- w' {3 i8 }* R前期准备:2 }( r/ {, B. L7 l8 E! A( f
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
+ {' o( X+ d# e' J 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
+ [) `) x4 i. i1 o- d( e3 v2 U8 E方法解读:' g! |' N5 `# U: }
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):1 u# O8 P L) ^2 i4 ]! }$ u
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
K0 n$ T! f' m+ U3 f6 _0 o; g4 d - {
3 Q' r! m0 S" ?6 e8 d - $enc = QRencode::factory($level, $size, $margin);3 o, ~/ M$ m! L, ]5 ?
- return $enc->encodePNG($text, $outfile, $saveandprint=false);+ z" E* `5 Q3 _6 L
- }
& \+ M/ f6 K; j. b* z
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;# i5 o G( S) Q* Y
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;# ^. k Y' |7 T$ h
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;" Y$ m' l! P2 m- e, ^( @
第4个参数$size:控制生成图片的大小,默认为4;% f7 a* N) L. r9 ?- ^& F
第5个参数$margin:控制生成二维码的空白区域大小;
3 k! ?5 W- f% W- V8 J 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;0 G3 S4 G$ i6 {6 n2 T1 ?
使用示例:
6 [; u" y& U& S* _3 }# s1. 生成二维码(生成图片文件)1 f M. q; ?* d3 B( m2 R
- // 1. 生成原始的二维码(生成图片文件)& e& }! v5 i9 h! X
- function scerweima($url=''){
/ e2 T! W t; w9 Q } - require_once 'phpqrcode.php';( M& j5 j0 Y" f: @
- $value = $url; //二维码内容
4 x- l- B3 P* k+ U O - $errorCorrectionLevel = 'L'; //容错级别
/ ]3 f) o2 b; _) \ - $matrixPointSize = 5; //生成图片大小$ ], h) m" b9 {$ \* [) y* [6 y4 H/ w
- //生成二维码图片2 b) A7 x7 r3 X/ m& B/ w
- $filename = 'qrcode/'.microtime().'.png';
; |$ Q! v6 x n) c( i. Q/ Y - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
" _% T u1 ` v/ A7 S/ W; ` - $QR = $filename; //已经生成的原始二维码图片文件
% ^1 S1 h2 r& U! A7 |1 m2 P - $QR = imagecreatefromstring(file_get_contents($QR));: B8 a; o; d" _7 \
- //输出图片) i5 |/ J" ~5 p- n
- imagepng($QR, 'qrcode.png');, s. }7 H7 F% u5 Q
- imagedestroy($QR);! U d; k) J4 U/ C' s! X
- return '<img src="qrcode.png" alt="使用微信扫描支付">';$ d; L0 @0 D# n3 [, |3 E
- } H5 _8 l6 m2 g, N8 K% D: I+ h
- //调用查看结果( u- N! z. U) D. g7 b
- echo scerweima('https://www.baidu.com');
5 x1 p$ w" Y1 g! B
复制代码 2. 在生成的二维码中加上logo(生成图片文件)* v/ Y& r8 \; O0 u) M* D
- //2. 在生成的二维码中加上logo(生成图片文件)
7 t9 Y3 l8 P# z9 _$ f4 D a2 ?" ^0 z - function scerweima1($url=''){$ g4 M9 J" I& z- K# }3 |# Y' s6 K
- require_once 'phpqrcode.php';
/ T, g7 ?3 [7 O- s9 u - $value = $url; //二维码内容1 _. `: z+ g% j3 d `( N
- $errorCorrectionLevel = 'H'; //容错级别1 k. I8 D0 f# e
- $matrixPointSize = 6; //生成图片大小& X$ v, j( j7 a t6 V
- //生成二维码图片
6 R8 Y3 J5 l# F - $filename = 'qrcode/'.microtime().'.png';
) C: N" G n$ [ - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);8 i/ U e5 R p1 c/ \: L
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片6 F8 A @4 u: @; R4 |
- $QR = $filename; //已经生成的原始二维码图
! R- N$ A& s6 d6 x8 `) Q4 i - if (file_exists($logo)) {
5 O& b- f- g* a5 |: ~ - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。, s, L9 ]7 ?5 ] m2 G1 b
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。4 @. A5 j8 u7 n6 C9 C9 H5 w# M
- $QR_width = imagesx($QR); //二维码图片宽度
7 z$ Q0 j) a& y: f( ~, c - $QR_height = imagesy($QR); //二维码图片高度
7 E( z+ i0 o x1 S; R2 n" U" [ - $logo_width = imagesx($logo); //logo图片宽度
; ]2 @0 D6 d+ \% f - $logo_height = imagesy($logo); //logo图片高度
' H/ ]5 m2 g7 ~3 A# y, B - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
1 h- Z: N5 ^) e, l5 A+ g7 R( Z - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
I- j& P8 K+ o! y7 }, X3 D; o% s# { - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度/ ^, ?; U6 P N0 F4 y4 F. @4 j0 V& q
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
" [6 p' @: s/ U/ B w' k, | - //重新组合图片并调整大小
$ T; v# T+ B# S' X2 R9 G - /*, |! n- W! _( e" H2 \7 H
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中8 ^( e% }; k; ]* h. J" Y" w
- */6 _# l0 H' M! J6 {# l4 X) k
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
% o9 Q7 Y# v" u# D; X, { - }
! j- Z& A ^& j1 ]- j) X - //输出图片
7 G/ X2 F$ @9 l3 C. _ - imagepng($QR, 'qrcode.png');
0 |, _( g' H3 [) V' s5 A. R - imagedestroy($QR);9 h* w7 U8 a8 a/ T
- imagedestroy($logo);3 T# y! U4 ] w* ~4 _1 f6 V- }" w
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
& n( b3 b# _) @; M/ @$ g - }( i0 R8 k% d# j6 L' x
- //调用查看结果7 ^$ X$ s. b$ H/ Y( M, e
- echo scerweima1('https://www.baidu.com');
# r. i' P, N* {
复制代码 3. 生成二维码(不生成图片文件)
4 M, F* ^& ~: }- //3. 生成原始的二维码(不生成图片文件)
' l" m% T2 F5 j% z" U; G - function scerweima2($url=''){
3 W {4 g/ g4 j$ v8 Q' ^6 f - require_once 'phpqrcode.php';5 z, j H: Q! Q- ~2 L* [; e; T+ j
- $value = $url; //二维码内容
/ |& K3 ~. c: S( \3 ] - $errorCorrectionLevel = 'L'; //容错级别1 _7 i2 E' g, K/ u; d+ E
- $matrixPointSize = 5; //生成图片大小8 h! s6 ]! [3 G- u, x
- //生成二维码图片
+ t0 W7 {0 q$ j$ { - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);' {6 V& O0 h/ K; R! d7 q9 y
- }# r2 @7 {; m5 x- ^% w$ G
- //调用查看结果
$ ]+ K! x4 p {# T: Y$ N - scerweima2('https://www.baidu.com');: U+ P9 t* v9 J5 V# _
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。0 p( H5 U2 x+ S/ p
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:$ b; g( Q* v$ E& r
在线生成二维码工具(加强版)
$ {# R' g( N( z3 F1 P1 G, K# phttp://tools.jb51.net/transcoding/jb51qrcode$ k7 e3 `/ }1 J
在线二维码解码识别工具
0 G7 Q) B, Y+ g# `7 [0 Bhttp://tools.jb51.net/transcoding/trans_qrcode
4 }: V0 X+ ?" H$ i9 d# ~3 w+ e% y. ?( Y1 A* k: ]
: K$ Y" t1 D" ?7 A$ f( q
/ \5 ]4 M4 A+ S/ ^6 d" w0 T2 r
& d5 R3 l$ @0 }# g7 c- ~
+ R& O4 s* u5 ^4 `$ f |
|