管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:4 H! ?( D5 e% r, U, O
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。* `: }0 L% z% T# D2 Z
前期准备:& G) U" H: J/ z* E
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
0 s! \% C& }* K/ f% _) k) A 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)* f: z8 I- J* g
方法解读:
- [9 w D2 K3 V7 Y下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):1 u) r: h# d. h5 Q9 @" n% p
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
- a; |) J g9 V; D) f1 s* z - {8 n1 M5 R( H0 J6 G7 ~( f
- $enc = QRencode::factory($level, $size, $margin);
8 I6 b) \1 j' ~3 D - return $enc->encodePNG($text, $outfile, $saveandprint=false);& F+ a. {; k4 \" ^7 `1 y- d
- }
$ k- P6 x* ?: H0 J7 r
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;8 u/ A! T* t' ~& D
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;$ j9 T- F4 R& f8 @, Z* A
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
4 o2 Y3 c0 U: |5 U3 e- ]" R 第4个参数$size:控制生成图片的大小,默认为4;
" i- E$ [5 V; O' x6 B; U 第5个参数$margin:控制生成二维码的空白区域大小;. J) f3 F! x1 _! m4 h4 ] ]) N
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;9 ~7 c" d6 `0 I0 U
使用示例:
0 I* E) s% o- P+ ~+ Z( E+ b6 S' T1. 生成二维码(生成图片文件)9 g8 o! A/ q8 t I. A# t# K0 K
- // 1. 生成原始的二维码(生成图片文件)
" O8 G* Y& x4 l' u% H# e% _ - function scerweima($url=''){: P# S; H, ?8 r- Z; J& x' ^
- require_once 'phpqrcode.php';
$ w& ^4 i' K; w, P0 F1 } - $value = $url; //二维码内容) {, f3 B& V6 ^
- $errorCorrectionLevel = 'L'; //容错级别0 h: P0 k$ u2 ? p
- $matrixPointSize = 5; //生成图片大小
) T. d$ a3 U' Q - //生成二维码图片6 t. A3 L+ ]$ ] ^
- $filename = 'qrcode/'.microtime().'.png';. J- ]2 s8 }+ F9 _2 q
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
3 @- [& ^ \9 @+ f" S6 }$ K - $QR = $filename; //已经生成的原始二维码图片文件
- D1 `* A6 f' k0 I. \8 F9 L0 c - $QR = imagecreatefromstring(file_get_contents($QR));
0 h& }6 |" x. p2 o& m% m - //输出图片
+ {( T* [+ P+ X# z/ y% Z - imagepng($QR, 'qrcode.png');( H8 q( p* J* W2 m8 t
- imagedestroy($QR);' z7 ] x$ Z! r/ t
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
! m' h% H6 y. f$ d Z - }
/ n d+ Q6 a* O: t& i8 l( s - //调用查看结果" g+ {3 D w+ ^6 b4 u5 N
- echo scerweima('https://www.baidu.com');
0 ^( }3 l2 F9 [; `) {
复制代码 2. 在生成的二维码中加上logo(生成图片文件)% k7 ]6 e5 V6 ^9 s
- //2. 在生成的二维码中加上logo(生成图片文件)
. H( `% \) m* Z8 [& w* _* U8 t! |: \ - function scerweima1($url=''){
3 J- @( p0 a9 G8 u: c- F - require_once 'phpqrcode.php';; x2 K) \0 B3 f' f- f8 b. B
- $value = $url; //二维码内容
/ U! b$ b& M' z$ M9 l - $errorCorrectionLevel = 'H'; //容错级别& E' ~. U7 j3 b& |* t( Q
- $matrixPointSize = 6; //生成图片大小
" V. D2 z( s6 j1 o! _8 H! _1 { - //生成二维码图片 j; R2 j( Q% f4 x9 f
- $filename = 'qrcode/'.microtime().'.png';% D }# @% l6 v1 |* c
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);( o. p9 A$ H) K) O" r% m- `+ O2 R
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片$ x' O) d8 E3 j- R" A2 [. y: M
- $QR = $filename; //已经生成的原始二维码图
$ e0 C3 z3 ?" j5 [) C* L - if (file_exists($logo)) {1 @, }+ p& U! n2 a; g
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。/ a3 G( ?: K {5 y
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
9 N( q8 `( T$ e/ g( R7 A# m6 c - $QR_width = imagesx($QR); //二维码图片宽度
2 f# r4 a7 T6 ~ W j6 e - $QR_height = imagesy($QR); //二维码图片高度# o/ c# t" J# n! b" @. t/ G- g
- $logo_width = imagesx($logo); //logo图片宽度* q3 n* Y$ m7 U3 F
- $logo_height = imagesy($logo); //logo图片高度& Y0 U, s: u0 {% T5 Y1 r
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
1 C0 \% X3 V! o# e$ z8 R1 G - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)7 q0 I- e2 l) Y
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度. F% ~. ~+ L8 [4 ?2 C
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点4 G1 s5 B8 W! E' I% F
- //重新组合图片并调整大小) N8 a/ y- [9 }
- /*3 \9 J/ Z' j! q# }& ]
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中) [$ L' h- H! l3 a4 g4 B0 g5 s
- */3 _1 [" k' ?/ w: m
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);% H- Q2 S j/ k" N
- }! X3 a X8 D" q1 l" U ]- R, C W
- //输出图片8 T0 i$ E- |/ N
- imagepng($QR, 'qrcode.png');
+ t% l5 Q8 ]% J* C9 y - imagedestroy($QR);
1 ~9 w; e5 q# K4 ?+ j - imagedestroy($logo);
" X k- ]" {* f6 U' R - return '<img src="qrcode.png" alt="使用微信扫描支付">';
6 `8 O9 `) {* W9 [2 w) S1 m - }
! Q" f$ z# d* u4 q0 m5 v P& Q, z - //调用查看结果
7 Q* i" P" `" m! ~& y5 l - echo scerweima1('https://www.baidu.com');
% N& `% O( ~4 r( `; d2 K
复制代码 3. 生成二维码(不生成图片文件)
" S8 D) w: v$ |! I) X3 r+ Y. r- //3. 生成原始的二维码(不生成图片文件)
/ I$ A$ n/ t* O7 [; o - function scerweima2($url=''){* C* A* U* d$ U4 P `6 k
- require_once 'phpqrcode.php';
. P* H7 B9 w$ X, [7 q7 n - $value = $url; //二维码内容
! m0 p/ c6 Y: F0 w; Q2 q; J - $errorCorrectionLevel = 'L'; //容错级别
+ R8 U+ @8 Z* ]& Y - $matrixPointSize = 5; //生成图片大小
5 W* j+ K- N& q- o - //生成二维码图片5 C( j' u9 C; u8 ~' W3 h
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);& S) f" _6 X5 f% f
- }
6 N, H k/ J3 b0 L5 _0 \9 } - //调用查看结果
6 R8 S* c" q& r2 [! h - scerweima2('https://www.baidu.com');$ K0 g& W0 F1 K A/ f% N8 V' ?7 F6 D" B
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
" L! d5 s6 ]: o0 c1 Z$ \ zPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:& v& q1 l7 s5 ~* |! P
在线生成二维码工具(加强版)* w9 I; @0 k* b
http://tools.jb51.net/transcoding/jb51qrcode
) g$ j) P* ^5 y2 I8 w- d0 V9 k3 q在线二维码解码识别工具! E8 @ X4 u! K' [( W- ?, l# e+ }
http://tools.jb51.net/transcoding/trans_qrcode
! d' A% w$ b, v$ m" r' P) [& G) J/ _
* E6 M; Z5 J2 s0 ~" i) z
( e. T- _3 m5 E" r
2 ~$ m- i# k6 V& Y% F
1 G8 m2 T0 W" d" Y+ T |
|