管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:* H/ l4 O: N1 F _
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。 P/ c2 k. y$ ]4 z( v+ M0 G! r
前期准备:/ V$ {3 S0 X) p b1 E3 t1 Y
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
) I+ R( F2 X% t 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
* u$ q/ t1 |5 P方法解读:
! {$ M: K2 T. c下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
$ b5 r( F% L" H- J4 q. a5 s: p: \) O- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) S+ s4 A4 V) B3 v- t3 w
- {
3 e% w( c7 }! |& }6 H4 x8 G* w - $enc = QRencode::factory($level, $size, $margin);
! \, i0 ~8 _! M$ t" U - return $enc->encodePNG($text, $outfile, $saveandprint=false);
( q5 l7 \6 C% ] K; [ - }
' U! o7 {# ]" U) A5 y* i
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
. o& C, h, ]2 c 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
5 r: A, L) k ~. N! {2 i 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
$ z) D) f2 J2 R6 q7 u 第4个参数$size:控制生成图片的大小,默认为4;
' m& M9 |' ~: g5 z1 _' t; d 第5个参数$margin:控制生成二维码的空白区域大小;8 i4 v% m: K1 T" l: N0 X
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
( b! N# ?: n d7 F使用示例:0 I8 w, B( v6 S0 ^, B8 D3 y
1. 生成二维码(生成图片文件)
" c* O) ~/ }' p. ]9 |" O- // 1. 生成原始的二维码(生成图片文件)
& r9 A9 c7 V, a; i, j, z - function scerweima($url=''){/ H+ K) {, t: ^
- require_once 'phpqrcode.php';4 x4 F5 i3 T$ h4 o( h# I4 ~
- $value = $url; //二维码内容
* p6 f, ~* H7 g* q$ m7 k - $errorCorrectionLevel = 'L'; //容错级别$ ]* @: H& o2 [- [( R& P8 y
- $matrixPointSize = 5; //生成图片大小
: T' A2 o! h$ }* Z3 m! i - //生成二维码图片3 W- N1 H; e. w8 l% A
- $filename = 'qrcode/'.microtime().'.png';" ?, s; s W% X' ]6 Z
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
( _9 Z: I3 k& F1 X7 u0 |6 D8 S - $QR = $filename; //已经生成的原始二维码图片文件
" J2 ^+ W) g$ [/ y. X - $QR = imagecreatefromstring(file_get_contents($QR));
' S! s/ j4 g. V% i - //输出图片# O @1 B* ~. t/ T! Z( q, V
- imagepng($QR, 'qrcode.png');3 B" f8 B6 `/ o0 o
- imagedestroy($QR);
. x1 Y, \, f$ r4 C - return '<img src="qrcode.png" alt="使用微信扫描支付">';
8 I( j( O1 P9 R+ f, u8 n) |/ r - }9 p k% a0 J4 R6 P0 Z0 _ f
- //调用查看结果
9 s: P9 n T& w! K - echo scerweima('https://www.baidu.com');- \8 `1 X: W3 w, Q" H
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
7 ~" |* ~0 C" T- //2. 在生成的二维码中加上logo(生成图片文件)
' O& }9 K! P; X9 `& o; I - function scerweima1($url=''){: Y; I2 F& V2 x! g% z T, N$ t
- require_once 'phpqrcode.php';
j r( Q i5 i8 T& _; T# u4 c, p - $value = $url; //二维码内容
4 L* w- r8 u4 E - $errorCorrectionLevel = 'H'; //容错级别8 _) \$ V3 u; w
- $matrixPointSize = 6; //生成图片大小' {% A9 J) n" }2 p; n9 e, b) @
- //生成二维码图片& G& S7 f$ Q& w" g
- $filename = 'qrcode/'.microtime().'.png';
' S3 Y8 ]; t! Q/ w7 Q7 p w- C, g - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
) a9 ?! m# N$ y- \! ~ - $logo = 'qrcode/logo.jpg'; //准备好的logo图片
$ U7 G8 \; h. `' } - $QR = $filename; //已经生成的原始二维码图; o, ^2 I0 O0 z3 }8 O
- if (file_exists($logo)) {
# `0 \) j5 D0 W% ~ - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。8 X6 r4 E( T* C
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
- C* n2 {" R3 f0 F - $QR_width = imagesx($QR); //二维码图片宽度. g) n: m& h0 z/ @
- $QR_height = imagesy($QR); //二维码图片高度% m0 T' r! ?( l$ }$ H+ b/ X$ q& [5 v% u
- $logo_width = imagesx($logo); //logo图片宽度
# Y# q5 q; F4 F - $logo_height = imagesy($logo); //logo图片高度" l- Q6 F( }7 ~- G6 i
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
6 s) u/ \/ L" S$ M0 W. A - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
\# I5 h; K# T# r2 c - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
z% o% Y1 e9 |6 L - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
! n4 U0 W3 e) B" j; G4 N - //重新组合图片并调整大小; \; F3 @9 L/ J l2 Q0 }: a
- /*
% Y& q! g: L1 ^ - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中5 s1 H; J) E5 N( F" g1 H
- */3 P* q8 G! e/ i" K
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
/ w; I" U! @" g8 {& `' D2 U - }* v2 B) [# x' S
- //输出图片
Y- }0 k/ r h& z - imagepng($QR, 'qrcode.png');( |: H, A' w& C8 I
- imagedestroy($QR);
7 h# F; f# D0 g9 S8 D" _9 I - imagedestroy($logo);
3 D/ ]- K0 f# z+ h1 B. ?+ r - return '<img src="qrcode.png" alt="使用微信扫描支付">';
9 n" i. K0 F$ Z% J0 v - }9 L# ~$ C9 Z' |5 b, ~0 B% P
- //调用查看结果2 K: @8 p. ^* I" c' r, S% ^
- echo scerweima1('https://www.baidu.com');
- M) d1 Z" f# Y& H
复制代码 3. 生成二维码(不生成图片文件)
) ~7 ?2 r z% `' V5 |% g4 [/ B$ n- //3. 生成原始的二维码(不生成图片文件)
1 T$ u2 j r' H - function scerweima2($url=''){. p) D: y$ r; i: |
- require_once 'phpqrcode.php';
2 D8 a6 Q+ T6 s# O: w0 M - $value = $url; //二维码内容
; Q% |( h5 v" v: V# J1 [# A" x - $errorCorrectionLevel = 'L'; //容错级别
' C1 P6 C: d% k4 l% D5 E) K- E - $matrixPointSize = 5; //生成图片大小% ]7 O4 i8 K# C3 ?3 x' @
- //生成二维码图片) u0 F9 P8 A- B
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);+ j9 k3 |$ K, c$ h/ o0 @
- }
7 x* |0 k9 E- o3 R. h5 N+ m& K - //调用查看结果( j( G( `; Z9 R1 |/ B
- scerweima2('https://www.baidu.com');1 Z+ w- @# A9 M
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。1 ?: s# e. I v$ X! |' R
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:: R1 O# {; g2 i
在线生成二维码工具(加强版)
+ T& n, l, t% E0 x6 @6 L0 Ghttp://tools.jb51.net/transcoding/jb51qrcode
1 n! c, c2 N" a在线二维码解码识别工具+ b+ ^% L3 u8 M4 ]% B
http://tools.jb51.net/transcoding/trans_qrcode: E: g W# |* {$ x% E3 o
% Y1 [: W$ h( W& r$ U
! o" l: a0 c; H3 g1 F6 h, [0 v+ n7 z+ T0 `( W6 k; O" k3 l3 i
* t `) u7 `( I. y8 F# X: @1 U3 L. x" L: P0 J
|
|