管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
* ]0 Y2 |/ {" p& P% G9 T使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
4 o! R: a w; e& w& D4 h4 M前期准备:
" S+ r. Z! o& z4 C8 H2 S1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/% |8 M, p+ _+ X7 V7 {) ^9 r7 Y
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)" M- \& s1 S, ^2 L& a! w
方法解读:! |# z1 J8 Q9 M2 U, U
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):2 C4 {7 e* R9 Q
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
- [6 H8 g+ o; y% L; Y - {( H4 f0 y+ {! v7 r) o
- $enc = QRencode::factory($level, $size, $margin);$ [6 v% L2 ]( Y) u z8 [, T7 {9 g7 k
- return $enc->encodePNG($text, $outfile, $saveandprint=false);5 U" r: R% Y5 s8 I5 v2 P8 N# N
- }
" J/ @) p1 j. j
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
5 _0 s4 z" C8 Q" u' C 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;# E) v0 i B% y$ b: b
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;; V1 \8 d0 b9 V6 L$ K& s8 Z
第4个参数$size:控制生成图片的大小,默认为4;
5 ?4 N4 P* ~* F5 N 第5个参数$margin:控制生成二维码的空白区域大小;
6 `2 X5 v5 [7 s$ x+ M2 ^: Q6 r 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
9 M, O( w7 L; W$ l使用示例:; o. x# Z( A1 R0 x
1. 生成二维码(生成图片文件)5 N, S, o0 O1 x" U6 t3 v5 s
- // 1. 生成原始的二维码(生成图片文件)2 X' o4 O" x! J# i; U
- function scerweima($url=''){
: ?( E$ j0 @5 F0 e - require_once 'phpqrcode.php';
% I: [7 E i, y0 y# b2 l9 G/ J - $value = $url; //二维码内容
" e! i; h. U( W - $errorCorrectionLevel = 'L'; //容错级别
) a3 E5 Y) E8 {+ \8 k8 B - $matrixPointSize = 5; //生成图片大小
- o: Z' n) j+ h( R! S/ i - //生成二维码图片
% I; X9 U4 F) q) N+ ~! H - $filename = 'qrcode/'.microtime().'.png';
2 g1 T3 A2 T1 O: I; m - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
$ q* ]8 R1 R" f - $QR = $filename; //已经生成的原始二维码图片文件* [" b" r' P; m
- $QR = imagecreatefromstring(file_get_contents($QR));. L7 R A/ A* }$ b! a7 C* P
- //输出图片4 S+ E+ J6 M8 u% p/ V) k" W
- imagepng($QR, 'qrcode.png');3 ?6 x) s) ]0 k% m' }4 Z3 S; j
- imagedestroy($QR);8 d! w5 [* r0 ]2 B
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
7 }+ z8 s- Y9 V - }
$ K, c) d! {: C" ? X5 @ - //调用查看结果1 T5 y0 ^2 \! G, x9 P+ s! o
- echo scerweima('https://www.baidu.com');" v5 X+ K- b. V% t2 [
复制代码 2. 在生成的二维码中加上logo(生成图片文件)6 s; O, h! ^! K8 u# z( s1 t/ R3 _
- //2. 在生成的二维码中加上logo(生成图片文件)1 n' N {# V& p
- function scerweima1($url=''){! t6 h2 |4 G1 h; e2 y
- require_once 'phpqrcode.php';
3 o5 v1 P! K: C, n; W+ s6 M( Y - $value = $url; //二维码内容+ m5 q2 t" O! t* `; m
- $errorCorrectionLevel = 'H'; //容错级别
% o1 L8 T& C5 x$ K9 `- g - $matrixPointSize = 6; //生成图片大小
* U" h* z' @5 q6 i; J0 l# f - //生成二维码图片
, G( f, f) K7 e0 p& {6 ]6 S7 W" f - $filename = 'qrcode/'.microtime().'.png';
6 K$ {% I3 B5 }& T$ o5 O - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
6 V7 I8 v* j5 |. n1 E& \( F5 g - $logo = 'qrcode/logo.jpg'; //准备好的logo图片/ r" O. R g) `9 k4 }' }
- $QR = $filename; //已经生成的原始二维码图$ m1 H3 i" v9 a
- if (file_exists($logo)) {
) c7 L. s6 D Q$ _ - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。6 y# R- f# s: ~; B8 H
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
3 n% A8 T9 P8 v - $QR_width = imagesx($QR); //二维码图片宽度
8 t7 j% u4 m' Y+ U7 I6 ] - $QR_height = imagesy($QR); //二维码图片高度
- T3 l9 Y% o, t7 \2 } s/ @ - $logo_width = imagesx($logo); //logo图片宽度
( g7 }- j6 N5 c' Y0 s# y6 z - $logo_height = imagesy($logo); //logo图片高度% `. b0 u5 n8 K
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
% F I0 }* ^3 m3 T7 h0 M4 @! p - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
# R, S9 z0 Z6 D - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
J" l' e. k; {9 C8 b - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
& w9 L' m) e" f, k; Z" g - //重新组合图片并调整大小
, w. f' U4 M& K% k - /*+ w5 k1 v8 S* P, U+ o- N
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
7 H7 ^0 v# U' ?" t& K - */
4 T S) s! \6 _$ J - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);! i F' d, p9 x9 @: s+ F( A
- }
) G2 y) Q- x3 T9 l \ - //输出图片8 U4 Z8 S% S% G" x9 j) q/ d' h
- imagepng($QR, 'qrcode.png');
- I5 F& Y) R3 p8 a8 \! X" v" l% v - imagedestroy($QR);9 {: O, P, L( g5 p
- imagedestroy($logo);
$ x. V4 w6 B/ g' X% C& k+ ^ - return '<img src="qrcode.png" alt="使用微信扫描支付">';8 M% V( D3 s5 i* t# m7 V, Y
- }
8 S9 Z; |1 h- N: ?* C' i" T( I - //调用查看结果
4 g6 t0 i a* y* e+ w - echo scerweima1('https://www.baidu.com');& g7 v, O4 c- b/ w6 p) h8 W# k% t
复制代码 3. 生成二维码(不生成图片文件), @) e8 w1 Q h6 K- z' S" E
- //3. 生成原始的二维码(不生成图片文件)* D, m% a4 v# r: B( |. g
- function scerweima2($url=''){1 `* g& m( E! P, g) l, Q2 ?* s
- require_once 'phpqrcode.php';
, S# N; x R- e" K - $value = $url; //二维码内容0 U: q6 l# j# ?& c3 t- w
- $errorCorrectionLevel = 'L'; //容错级别
9 j: n4 k6 P) K9 n' f - $matrixPointSize = 5; //生成图片大小: H6 c: ^+ p1 U( _# o
- //生成二维码图片
- f, z, B! Y F6 _ - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
0 D$ I# i; x8 N+ S( L - }6 r0 [2 I( W! }' y M
- //调用查看结果8 O n& C4 _' \$ {( N
- scerweima2('https://www.baidu.com');
: x# D. c6 Y% w, V
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。8 a9 P$ f- u0 Q2 G. B+ o
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:7 u9 V+ ], v, P6 G
在线生成二维码工具(加强版)) X- L0 `9 U0 E# _ h1 G
http://tools.jb51.net/transcoding/jb51qrcode
7 R+ T* s1 x- F# P7 V8 d在线二维码解码识别工具
; o7 z7 k) H3 Zhttp://tools.jb51.net/transcoding/trans_qrcode
$ l) L1 H- q3 O8 ]- m# T: f. Q/ A9 E+ N( F* q* B
' V3 |7 R8 ~( A' o
7 k9 G: u6 k, f# y; T; ?6 m# W6 K
. I( [/ Q8 f# H4 f6 ~. ~) K; B, j3 q& |
|
|