管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
" k: X% i# S0 f, Y- {" ^- {6 M使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
; X* [% R$ D: E) H Y- f5 U- k前期准备:9 H; A% U3 d/ q1 E
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
3 U+ Z7 e' Z7 M& t* |" L0 x$ ~) _ 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
8 F; ^1 N" P% _ |9 q方法解读:, Z+ w, o$ |4 W5 Y5 B- N
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
' G) j: _4 ^+ M- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)/ T& e, x. V: [& w5 l
- {5 q2 N. g1 p& x0 o3 q
- $enc = QRencode::factory($level, $size, $margin);
* u2 W( y# Z& z5 E7 u. _ - return $enc->encodePNG($text, $outfile, $saveandprint=false);; Z" P3 W$ E( W; T: w) N+ g, g) K
- }
: X6 g- E$ D( L4 z7 D
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
' O3 g/ _/ H0 l, l6 r 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;0 s( K2 S/ g: C0 b' s$ l
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
* e. M& R8 K& ]1 o5 q 第4个参数$size:控制生成图片的大小,默认为4;
: _/ G, S8 R$ n% z: y 第5个参数$margin:控制生成二维码的空白区域大小;
9 `( D7 B3 O+ [. v6 B; O2 S( ~ 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
& |- l# P0 G6 x使用示例:( m$ Z3 [6 K9 c5 w3 s
1. 生成二维码(生成图片文件)
. M8 i* D( s; J) m7 g& F& z7 j- \' z& X9 a- // 1. 生成原始的二维码(生成图片文件)7 ~3 V0 G9 K0 l! k4 k( b
- function scerweima($url=''){7 E. w# c I# R4 d3 l
- require_once 'phpqrcode.php';
/ R$ P3 C! X6 W - $value = $url; //二维码内容* F0 Z- P0 E8 S
- $errorCorrectionLevel = 'L'; //容错级别+ |, ^1 b$ H- Q S( ?
- $matrixPointSize = 5; //生成图片大小
5 ]- ]# Y! _' U9 Y; N/ u1 N - //生成二维码图片4 N$ N' i0 P- |( {3 y% w
- $filename = 'qrcode/'.microtime().'.png';
3 [5 n/ W- i5 v* p: ?2 h. F, ~6 h - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);# z$ u8 y2 Z c* k
- $QR = $filename; //已经生成的原始二维码图片文件: x! K& F: p. |( e, w
- $QR = imagecreatefromstring(file_get_contents($QR));% C3 D2 x% Z" g+ Q: M
- //输出图片
3 G/ Z# @6 e9 f: t* O2 O, n - imagepng($QR, 'qrcode.png');: u$ C C+ P; X: i
- imagedestroy($QR);' S& H/ h! L7 P+ E# y; `$ L
- return '<img src="qrcode.png" alt="使用微信扫描支付">';1 S8 U# @; m+ ]* }
- }
2 x- e# K ^3 L$ b' R; @4 x2 h3 K - //调用查看结果- w: z! @$ \( Y% W
- echo scerweima('https://www.baidu.com');1 P; I# E5 K3 \& ~, c) g$ p6 ~+ Y
复制代码 2. 在生成的二维码中加上logo(生成图片文件). B* @5 b L) {' J0 I/ u/ k1 `
- //2. 在生成的二维码中加上logo(生成图片文件) P h- y$ ?9 \. z. _
- function scerweima1($url=''){
F1 P, t2 ^8 i* B - require_once 'phpqrcode.php';$ G& `) B' @! r- i: {4 e
- $value = $url; //二维码内容
/ }: w' [, {1 \5 L7 B( Q, { - $errorCorrectionLevel = 'H'; //容错级别, S' c( ^7 L! ~6 x, F! I9 d
- $matrixPointSize = 6; //生成图片大小
& S5 z$ u3 [1 s0 h; C0 {- }6 {# s - //生成二维码图片
9 e0 ]( D3 i5 p. t6 K( A3 s - $filename = 'qrcode/'.microtime().'.png';
0 L+ j3 k# h( @- f1 l/ E+ z - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);) v" G5 q9 X% z* t1 o8 b( B# n
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片
! \) O( y8 F) ^3 S0 F# y+ } - $QR = $filename; //已经生成的原始二维码图; g* u# r- ]0 m* D# f! O+ R' I
- if (file_exists($logo)) {
( a6 [# }0 f Y K) a2 B; l - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
/ T8 u/ `# P+ F( L9 J - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。! `& }! C+ S/ o1 w) ~/ ]. h
- $QR_width = imagesx($QR); //二维码图片宽度
6 q- T5 n2 B8 h6 P$ m. A - $QR_height = imagesy($QR); //二维码图片高度' e) K w: Z, N; V/ N% i+ u8 C! F( y
- $logo_width = imagesx($logo); //logo图片宽度
8 N, g2 j, O% \+ O9 c0 J% ~8 E' X - $logo_height = imagesy($logo); //logo图片高度
6 o+ @+ X! I+ Q1 {4 f$ Q - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5), w, \7 P" I# k: d9 H) n! B& G
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)3 e5 D! ^8 D. J2 @- v
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
: x9 M8 w0 o' ~8 \0 I, ? - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
8 q: N$ ?: F! U4 r" C - //重新组合图片并调整大小/ |# i, n) B$ _: ^5 f/ P5 v
- /*
0 B+ B" Y5 e* R& ~ n/ B/ v. c - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
; L3 p ~1 }9 n: e1 Z) b - */1 W, L+ `- j& f; H2 _4 w: p
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
" t9 D' L, f7 i$ g - }; Y" O0 M# J; d9 l I% D
- //输出图片3 a! n0 F) G7 {1 e4 { J
- imagepng($QR, 'qrcode.png');+ p: L/ W' ]! x# @( V0 n9 m
- imagedestroy($QR);) o j2 i& ~" x t3 [- Y% `* j* U; l
- imagedestroy($logo);
9 q7 G* i! A- ~ - return '<img src="qrcode.png" alt="使用微信扫描支付">';7 g* J/ i" W8 j) y6 @* N
- }
2 D6 C \/ G. L. O( Q% m - //调用查看结果
! X6 B2 d( L3 L1 P- Z9 t9 H - echo scerweima1('https://www.baidu.com');
* L3 |! Y& U9 k& i \, ?* k6 }
复制代码 3. 生成二维码(不生成图片文件)
7 }( S( C, N3 g* T5 N- //3. 生成原始的二维码(不生成图片文件)
( Q) L5 R8 C& J3 p, T, ~ - function scerweima2($url=''){
$ N" _2 E) U2 v" k; |: K4 z - require_once 'phpqrcode.php';
+ e8 j+ }7 v% a- q - $value = $url; //二维码内容 U5 n1 d) s" b; z" K. Z
- $errorCorrectionLevel = 'L'; //容错级别0 J. C2 m3 U8 n+ s0 N' f2 p
- $matrixPointSize = 5; //生成图片大小
. q" i2 k/ P8 m$ i$ v - //生成二维码图片. W( \& u. z. s$ G8 S
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);6 T; T& F, Y* V6 N
- }
! G+ ?1 c& }: _, y - //调用查看结果
, D3 D0 @( F/ n- E6 p - scerweima2('https://www.baidu.com');
& L5 `& [- L0 y; R, Q
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。 R: J% o% m7 u c: X& z- z
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:$ C. `. C5 n C! ?- T
在线生成二维码工具(加强版) l; O6 j/ i2 ~0 H1 \# a
http://tools.jb51.net/transcoding/jb51qrcode( P% Q5 T1 M" d
在线二维码解码识别工具
2 l$ X8 b$ O9 m8 e* W( `2 Jhttp://tools.jb51.net/transcoding/trans_qrcode
1 |0 B q$ I" X/ e1 h5 y, M" N @! w/ g
# {& S' p J: k- |' k
( ?' i1 G2 e: D, U Y6 S; e, g; k3 c
1 X$ ?! S' u6 O' c/ \- e% Q# w/ U8 _* v8 m
|
|