管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:3 |4 u. P5 j$ ?- p" g4 q
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
/ `. D" o$ }# \. ?' S前期准备:
. _$ p0 U8 X+ L. j! M1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
. B, m5 N& ?4 D+ ~ 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)( T t" h8 d; H4 v+ i& J$ e
方法解读:
' e! I" A+ M! x+ q- ?1 u下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
- X6 E- f _1 s2 r- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)5 S) t* |6 _+ h7 X6 A
- {
& V& C! w5 r3 c$ W0 m7 h. j3 m" k - $enc = QRencode::factory($level, $size, $margin);
6 I9 o6 A; d [) R6 s - return $enc->encodePNG($text, $outfile, $saveandprint=false);( k$ D) M+ _8 X- i' i e5 A' ~
- }/ _' I6 ?. \+ S
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
1 X6 ]5 u J w' H6 i0 o 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
: L F5 |. D2 E' y- e3 x, H9 ~ 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
7 Y' j1 G2 T/ u& m 第4个参数$size:控制生成图片的大小,默认为4;1 T+ R: {& P- G. |! i0 z
第5个参数$margin:控制生成二维码的空白区域大小;( F1 G' R7 m- u( g. j; j
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;) ~2 e: |0 Y4 ^+ U: ^0 N: O
使用示例:+ Y% f* i; o9 }8 o
1. 生成二维码(生成图片文件)$ w/ E4 Q4 G2 L0 ^6 B1 Z
- // 1. 生成原始的二维码(生成图片文件): W$ Z2 m. w+ z" Y3 t! G
- function scerweima($url=''){
6 [3 T: { f4 N' W; k r! E: n% k - require_once 'phpqrcode.php';
; J7 E/ y: P. ~" m6 _/ F - $value = $url; //二维码内容6 c. N/ w7 o: ?! C
- $errorCorrectionLevel = 'L'; //容错级别
! D% q( Z3 S l5 C- E8 X* |9 | - $matrixPointSize = 5; //生成图片大小
, I, a! m$ U% i$ `% E) T7 j - //生成二维码图片
0 l9 a! _( C- G* W - $filename = 'qrcode/'.microtime().'.png';
& B! E2 a' s( N# ?1 U4 x - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);& G9 D. T7 X# f; F# A) M
- $QR = $filename; //已经生成的原始二维码图片文件! c8 G. |4 L3 r" X' b0 K( c
- $QR = imagecreatefromstring(file_get_contents($QR));
- s ~& Q6 [% d/ [) D! N2 ? - //输出图片
+ x4 C, F, x$ `2 P; O - imagepng($QR, 'qrcode.png');
& z" d: X; h* ~4 A) C- E - imagedestroy($QR);
; D* c. C9 L t5 C J+ L% P- d - return '<img src="qrcode.png" alt="使用微信扫描支付">';% `7 G, U* U0 F' i# Q. k" l
- }
2 \# a( b- v3 p8 N0 W" {% y - //调用查看结果) G8 D, d+ H$ G& Y& a% v. S" _+ D' O2 S
- echo scerweima('https://www.baidu.com');0 ]5 z% }) Z1 [5 \+ v- L8 y( I
复制代码 2. 在生成的二维码中加上logo(生成图片文件)9 k0 n# b+ B% Y" y. g! a. i3 l) J
- //2. 在生成的二维码中加上logo(生成图片文件)
4 ~* @- j% @; R5 q; F$ i9 c/ Q - function scerweima1($url=''){2 C% X+ p3 P- L. H5 I% D
- require_once 'phpqrcode.php';
# {/ K# `: J& {9 w% d - $value = $url; //二维码内容
! ?9 K+ _& z$ }: Q' Q# ? - $errorCorrectionLevel = 'H'; //容错级别
) ]. g1 _4 y/ [+ i0 Y - $matrixPointSize = 6; //生成图片大小0 B& z7 l1 M0 i2 \, S
- //生成二维码图片
1 V! I) l' b. `% z3 D* f - $filename = 'qrcode/'.microtime().'.png';% S. `5 o6 Q3 j* N
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
6 X5 T) z" K! v1 h3 ?! b5 R: V$ X - $logo = 'qrcode/logo.jpg'; //准备好的logo图片
* b: |" u6 D; `% A - $QR = $filename; //已经生成的原始二维码图
/ y. d* l0 z4 X( S! J9 {1 Q2 [' j - if (file_exists($logo)) {8 u4 u& R5 ?, ^& \: l; [
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
+ m9 P( @% d2 s$ D8 U9 x - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。/ d( I3 y1 f/ p# U2 i: C1 j l
- $QR_width = imagesx($QR); //二维码图片宽度
; r/ d' ^% T I. R' s1 t - $QR_height = imagesy($QR); //二维码图片高度
4 A% p9 {+ _0 V, S& y - $logo_width = imagesx($logo); //logo图片宽度; s$ }2 g" I! f8 M. A
- $logo_height = imagesy($logo); //logo图片高度' R- q0 ^" d+ r; ~" y( o. ?
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)4 m) {( N! Y) ~1 l. X
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度): a4 ~0 C; s5 X' Q
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
# {& d# U9 u! x1 ^+ O; {0 h# @ - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
G; p5 g& x5 p! h - //重新组合图片并调整大小
" R/ A+ i( y9 m0 w4 s - /*) T: d* n' Q/ A3 B7 O3 W, w4 {. [
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
/ D/ `6 t& X5 H - */
/ L: ?/ L( Z8 X - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);* E1 m) E% A! b
- }
% v, F2 {7 R0 [ - //输出图片$ r- a1 D: B% \) {8 g
- imagepng($QR, 'qrcode.png');- \9 U& Q8 E/ w0 q$ m+ _
- imagedestroy($QR);
6 g/ @ G [) Y' k, N5 I - imagedestroy($logo);3 Z7 B; B8 r6 w- `" T: e
- return '<img src="qrcode.png" alt="使用微信扫描支付">';+ K7 w0 w0 e5 m) o$ K: d4 H
- }2 p7 w7 e) B5 n! f0 i
- //调用查看结果/ t7 \- e" f' s+ ?% X* a
- echo scerweima1('https://www.baidu.com');
1 w* Y# b. t0 k# Q g
复制代码 3. 生成二维码(不生成图片文件)& O8 c: B2 C; m8 T
- //3. 生成原始的二维码(不生成图片文件)
3 c2 z6 n }; T" F - function scerweima2($url=''){- x' N. h; H# m( }! b: i
- require_once 'phpqrcode.php';- ]8 u. I: Z- t/ s
- $value = $url; //二维码内容/ u' ?0 {3 C2 W+ @( @' T# k2 v
- $errorCorrectionLevel = 'L'; //容错级别, X1 A% _! ^+ s6 K( r9 |( H0 f
- $matrixPointSize = 5; //生成图片大小* I. `, k- h4 V5 k2 ]
- //生成二维码图片$ J9 t) J/ l" E
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);) _" h, }+ m# P# _0 d" j8 d0 d
- }- l* E G/ k; ?% A) P2 F
- //调用查看结果' w* v/ Y5 E0 d( f6 k8 A, p8 e% ~: F
- scerweima2('https://www.baidu.com');: \# J8 N" I' i1 f) N4 h$ ^
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
. e* m G6 h% T# sPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
8 Z) O5 a9 _, K在线生成二维码工具(加强版)1 N9 W% h# o4 J" A7 A" ^3 t
http://tools.jb51.net/transcoding/jb51qrcode" B$ a, M3 @) F5 N$ [& n
在线二维码解码识别工具
d) H# w2 o8 E# Shttp://tools.jb51.net/transcoding/trans_qrcode
; y/ O T0 v2 k R& d; X) r. {9 V$ r2 u4 d9 J# j
7 E. P' ]9 ~0 @$ F
9 }6 f% f# } g
* ]8 G2 A7 S; D4 Z4 v$ F/ `) R0 i6 Q7 Z
|
|