管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
4 _9 h% b8 j/ C% z3 b2 J9 ]使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
; c# e! u; x$ C9 ] @- p( y5 Y& Z前期准备:8 [% F% H& L: a" Q$ C9 r! b; V e
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/: [$ s+ y$ r( W4 z5 @' t! u4 f* }) E, p
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)7 \, B: Q( J5 B+ H9 O4 \% ^1 X6 D
方法解读:5 |$ e1 _6 h) Q' b4 X: |
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):6 m: f; V& E5 P7 m4 V2 M
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)& V0 |+ U7 a& C6 ]1 G: h6 _
- {
" D- T8 {& D& K! j- c' k - $enc = QRencode::factory($level, $size, $margin);, ^% q& y! G0 i& U' r+ G# _
- return $enc->encodePNG($text, $outfile, $saveandprint=false);% J$ J, R- R& B7 I7 e
- }5 ]2 G3 V5 t5 M. \' L
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
0 B' R7 t9 V* {/ Z/ ~8 s 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
4 G0 D/ y# B6 u8 g# [" S8 \ 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;- N% f3 X; Z, f% k, H; h- T
第4个参数$size:控制生成图片的大小,默认为4;" L) \1 k" z1 ~& N, \! O
第5个参数$margin:控制生成二维码的空白区域大小;' d# i! K5 h6 x. ~
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
, D' t6 q2 X4 i使用示例:7 X4 e6 B0 e% t" e! k8 {( s
1. 生成二维码(生成图片文件)
6 N" l: J5 X" [- u% i- // 1. 生成原始的二维码(生成图片文件)8 o) Y$ o7 e5 G7 w$ ^
- function scerweima($url=''){* J! y% v9 H; b( r
- require_once 'phpqrcode.php';, i s$ c+ ~6 j: ^& H+ p
- $value = $url; //二维码内容+ [, f* b' U4 q$ r7 G
- $errorCorrectionLevel = 'L'; //容错级别- J5 c, M' c" R6 x. Y
- $matrixPointSize = 5; //生成图片大小
5 x. S9 E+ B: T# k6 N; S - //生成二维码图片
. j8 Q1 j1 U( Y6 z. X, D' [' C - $filename = 'qrcode/'.microtime().'.png';
1 j/ w3 S) c A" F1 |. y - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
( G3 Y& B; s& ?$ {- v U% K1 m - $QR = $filename; //已经生成的原始二维码图片文件
' ?' O# _% }3 [4 H - $QR = imagecreatefromstring(file_get_contents($QR));7 Z$ t# @1 F7 H% F) @% X1 ]& d
- //输出图片9 r6 d1 _$ \. t; B- ?/ `2 Y/ s
- imagepng($QR, 'qrcode.png');+ z6 k+ H7 a, o
- imagedestroy($QR);
1 |0 y- p+ ^! t9 T: h9 q - return '<img src="qrcode.png" alt="使用微信扫描支付">';
- g4 Z$ j G! w- b* Z. G' a! A# X6 C - }
: Y2 Y- L$ h- A! ~+ i8 A$ H. T - //调用查看结果+ c2 F) ?+ S7 \! \ {( }
- echo scerweima('https://www.baidu.com');
5 T5 K! g7 e6 f' I4 J$ L
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
$ q; c6 a; w% \ H: z- //2. 在生成的二维码中加上logo(生成图片文件); k- ~4 Y. _' o2 J
- function scerweima1($url=''){
$ X7 y* k! Q6 H& k. w/ [" r - require_once 'phpqrcode.php';
8 U, Y: i0 I9 k# m, N - $value = $url; //二维码内容1 d( P1 Z9 \' `/ ~
- $errorCorrectionLevel = 'H'; //容错级别" x* G6 b$ X# B* ^
- $matrixPointSize = 6; //生成图片大小 o% _8 N) Z( ~6 y. K: j% k/ V1 @
- //生成二维码图片- J: S1 W" V, A
- $filename = 'qrcode/'.microtime().'.png';9 `* R2 l8 x7 E7 l# f5 T
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
1 Y2 R5 A0 Y h7 r' C) e - $logo = 'qrcode/logo.jpg'; //准备好的logo图片
) B6 o6 l2 }: U E - $QR = $filename; //已经生成的原始二维码图
( g/ Z; w5 Z, m; m - if (file_exists($logo)) {
. w/ b$ W0 e5 l; Z& F3 ^& ~# ? - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
6 Y2 L0 i! m' j# m - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。; a5 F1 u- j* \; Z1 G* X) w
- $QR_width = imagesx($QR); //二维码图片宽度3 ]' X. D0 g7 v( H& X5 P
- $QR_height = imagesy($QR); //二维码图片高度. G% D1 G9 j+ [6 ]& K
- $logo_width = imagesx($logo); //logo图片宽度. a, z" A& `& F v6 s3 ~
- $logo_height = imagesy($logo); //logo图片高度
; ~/ B; L6 \/ ^3 m& e: P1 | - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
1 I0 S C0 T) V3 B# p - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度). w# A5 [& B+ u( Y' `8 m0 ]
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
% s# }) N" m% o. {4 B - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点. ~* r: i L8 W# P, x {
- //重新组合图片并调整大小
1 \% C. n) y& n5 G7 w3 K: a8 ` - /*. M$ m9 j) m; l" m1 y: Q( C
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中; y/ E v0 _% \0 g) G
- */
' ?, {, l& `5 M- T - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
+ w7 P. i9 G) x6 ?, a - }
1 S$ a1 D5 Q9 `& N: K" a+ k* o! m - //输出图片
# }/ s8 v) \, ~: { - imagepng($QR, 'qrcode.png');6 y* z: ?( F; X9 t5 V' Y+ p
- imagedestroy($QR);5 X- R1 L" \( }' F9 P
- imagedestroy($logo);
8 p1 g2 e+ c0 A+ z6 Z1 ~ - return '<img src="qrcode.png" alt="使用微信扫描支付">'; a" g8 L$ w; s! z2 _
- }
3 C; O) w' w1 D! V& @% y2 |; ] - //调用查看结果
7 q( D4 G, Z# e4 l" A2 i - echo scerweima1('https://www.baidu.com');
. j) E; h- C# I* ?+ M+ }
复制代码 3. 生成二维码(不生成图片文件)/ v6 f0 j. h3 v) c5 U# u) w( j" L
- //3. 生成原始的二维码(不生成图片文件)
. R' w- ]- p/ C5 e, ?$ D# v - function scerweima2($url=''){6 A. M( Q! X m% r( x( u, n
- require_once 'phpqrcode.php';4 {1 p7 g" n6 a0 q0 M& F. q8 x
- $value = $url; //二维码内容( S) g" ]+ U! o- {( F3 F' _
- $errorCorrectionLevel = 'L'; //容错级别; [" K. j+ G9 y: S6 S& u
- $matrixPointSize = 5; //生成图片大小0 e) M2 u2 Y. J9 x7 v: t- u
- //生成二维码图片" ?" w% w3 t8 e/ [ Y
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
) \4 G! c! o3 S& S' N# g - }* }0 N- C! k( ^* R e
- //调用查看结果
) N U0 {, Q4 R F2 u - scerweima2('https://www.baidu.com');
/ ]1 |9 \. @6 w0 v
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
" I. \& n2 \9 EPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:( o/ I7 w3 h" q U9 s1 |
在线生成二维码工具(加强版). Q5 U+ k) S. S. W$ C+ ?
http://tools.jb51.net/transcoding/jb51qrcode( A8 R h$ q. O8 ^) V6 T# p
在线二维码解码识别工具
' G$ p) u+ ]3 N! h+ A! D Hhttp://tools.jb51.net/transcoding/trans_qrcode% a4 y/ V- Z! A- z
% X( K3 J, J" z% S
! O4 |1 L+ X4 a" M: E. m
9 |5 ?" y% O% ^/ u* B+ ^+ S
/ r- J. k+ ]: j6 s3 F
F: k' |2 Q/ _5 n! G |
|