管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
9 [1 K. A$ {6 d: H* i使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
% w9 ?0 h, }1 ]" B; @# Y7 ~; ^: w前期准备:7 P. r- I% y. r* d
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
9 P% i9 f% ~, @8 [1 T4 p 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)% [: _& s, _) A' x! M5 [. h# t3 [
方法解读:
3 O, |. P! U. A7 i' ?* Z下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):# m' r! o$ m# q
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
8 K1 l/ R9 G( F3 x - {
: D( |! }: ]& b3 L$ l) `& B - $enc = QRencode::factory($level, $size, $margin);
1 I B5 Q! ]4 F+ B: s# a. V - return $enc->encodePNG($text, $outfile, $saveandprint=false);1 i) t: ?' K+ ]/ F. F. r3 A5 F
- }. V( r% B6 L; s5 K ]( g; Q: G
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;8 \7 a- C" w- j, J. b& {9 |: F0 z0 r& h
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
% {9 {1 r4 L/ A O4 o 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
; \4 l/ X/ r8 s0 m$ Z( d& h 第4个参数$size:控制生成图片的大小,默认为4;
' f% K5 [% ?& D6 v 第5个参数$margin:控制生成二维码的空白区域大小;$ s1 E8 f6 A1 }! C
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
2 Q5 D% r6 m, R4 J2 X/ |使用示例:
3 F3 J0 u4 O9 l, z3 G; i9 E8 y, Q1. 生成二维码(生成图片文件)& F7 s3 J! \: w- S: o6 w+ Q" j
- // 1. 生成原始的二维码(生成图片文件)
* {8 g, r, ]5 ~- u3 a2 @ - function scerweima($url=''){+ b* \. B0 X: l/ m. u
- require_once 'phpqrcode.php';
8 D( H2 M8 r) c% \8 ? - $value = $url; //二维码内容' |- W' V* E7 g! y
- $errorCorrectionLevel = 'L'; //容错级别
$ G& N. L4 b3 D. m8 {0 J0 \ - $matrixPointSize = 5; //生成图片大小
0 y; A; l. G6 T! s1 s - //生成二维码图片6 ]! P) a# Z {5 l* ^
- $filename = 'qrcode/'.microtime().'.png';
* B5 t# \: A7 o, w. u- @ - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
% T( Q) x- P$ q" d5 l - $QR = $filename; //已经生成的原始二维码图片文件4 i$ l$ }7 _5 E/ b5 z) q
- $QR = imagecreatefromstring(file_get_contents($QR));( v2 m3 v, B7 \/ E4 o8 V7 K0 P' u' s
- //输出图片
7 j4 \6 Y$ p, S4 I - imagepng($QR, 'qrcode.png');: ]1 {2 Z1 w0 S. C
- imagedestroy($QR);
/ m8 {' o7 k4 |" z' f - return '<img src="qrcode.png" alt="使用微信扫描支付">';* I/ Q! d3 |# F Z
- }4 R% E8 M9 e7 h, ^# Y7 p
- //调用查看结果
) V6 S- O; X+ u1 `; ^+ c- U - echo scerweima('https://www.baidu.com');5 ~ v& Y7 Y1 |# P
复制代码 2. 在生成的二维码中加上logo(生成图片文件)# j, d. ~- i; M( Q8 _9 i% x7 s
- //2. 在生成的二维码中加上logo(生成图片文件)) | W( `/ Y- d
- function scerweima1($url=''){6 W8 ^' _% `: f" j' L$ @
- require_once 'phpqrcode.php';0 H* O8 I( _! L% C: e& N" R3 ? ?0 i
- $value = $url; //二维码内容
3 f4 Y6 J: P4 {4 G - $errorCorrectionLevel = 'H'; //容错级别8 K: |1 j/ q+ D+ k
- $matrixPointSize = 6; //生成图片大小1 h) V, Y9 a( }7 o/ B' e
- //生成二维码图片
7 N6 N( T: f4 }( r$ q4 K - $filename = 'qrcode/'.microtime().'.png';
/ K" Z. n8 O6 K- j1 m) w$ c$ k! k - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);( f; ?( n `6 R+ ?) K9 j
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片
: I/ D4 v% `3 I2 L8 c! E - $QR = $filename; //已经生成的原始二维码图
# b9 x6 _" w* Z2 U8 P - if (file_exists($logo)) {
0 X' V+ Q- Z: g# N - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。; L6 S. l6 S5 j& D3 {# b
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
8 s$ F* ~' Z: T+ Z - $QR_width = imagesx($QR); //二维码图片宽度
2 H9 W! Y- I6 b6 o2 Y+ @ - $QR_height = imagesy($QR); //二维码图片高度
% g/ y( L% z9 ~" M6 c$ C - $logo_width = imagesx($logo); //logo图片宽度
! r6 d' M' N/ O# i4 h& b - $logo_height = imagesy($logo); //logo图片高度
: R0 G# y8 Y F: w7 C) K! s/ U - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)9 [) B0 u- v* Z/ y
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
$ w2 H. X" K9 E6 ? i& n+ \ - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
; R) E0 \2 Y( m - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点9 a9 Z/ U, e* B7 y3 @
- //重新组合图片并调整大小
3 z" N0 ~. w8 S$ a! Q, W - /*3 L$ g, U# C2 z
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
4 Q, [3 ^/ |8 U' E6 w& e - */
, n" k! y% L8 @& `8 u8 l - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height); v& ]+ _/ i! N4 s
- }
. x9 l2 G0 [- n! O1 W, w2 W( J - //输出图片
V N3 L8 k# O - imagepng($QR, 'qrcode.png');
t: r, X' y8 B0 U( x/ c" A - imagedestroy($QR);
" c% o) e' D$ C5 | - imagedestroy($logo);
& a: g, U7 p8 C. c* N7 O, R - return '<img src="qrcode.png" alt="使用微信扫描支付">';1 m3 ]) h. H: B% G
- }9 d1 s0 a% X1 v0 H5 B E
- //调用查看结果
' r' _& D3 }& u! d# n - echo scerweima1('https://www.baidu.com');
) M8 e# C* I n3 D+ l% d1 W6 U
复制代码 3. 生成二维码(不生成图片文件)) \0 f0 m$ e9 J$ }5 f: w' V
- //3. 生成原始的二维码(不生成图片文件)
2 p& f$ g' x6 H( f - function scerweima2($url=''){
& a4 V, ]% o) g( M4 S: c# W - require_once 'phpqrcode.php';
% `8 Y0 t+ S: q7 @ - $value = $url; //二维码内容
! v9 b f8 E5 l# M+ d - $errorCorrectionLevel = 'L'; //容错级别# f5 F% @& k2 W
- $matrixPointSize = 5; //生成图片大小( U9 e S( P( `/ H
- //生成二维码图片0 p0 j- B2 V" ^
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
3 K7 _5 c, U4 M" C# ~$ W- O2 D- ` - }+ O) o$ @0 K! x4 z
- //调用查看结果# Y) U+ {& a. Z
- scerweima2('https://www.baidu.com');
$ A" y* N3 R! q
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
. U% x5 [0 n9 _$ r7 LPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
3 P( o% M: v8 q0 z+ Q% ?6 t6 \在线生成二维码工具(加强版)
/ _. s0 I8 G1 `/ g& n4 ~http://tools.jb51.net/transcoding/jb51qrcode6 I4 H: [8 `9 ~+ A6 M' V7 D$ x% q
在线二维码解码识别工具: ]" M. ^8 t$ q' e$ z7 k6 s
http://tools.jb51.net/transcoding/trans_qrcode
8 I" K4 @6 n6 ^6 g/ ?4 z% V7 V
F$ N3 ?% H' C9 o: T) U% A! E0 |! r' W. U+ `
4 a6 H% K& _8 J
4 D' \, l- Z3 q% R/ L
, s0 g* K% z3 z9 e0 ?0 Q; j: _ |
|