管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
# B3 R9 j2 h7 K0 m6 f) y使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
; }# E; C$ {* ~前期准备:8 a$ D4 @2 `, d8 x+ |' P
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
7 ~$ D4 \) W6 ` 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
6 ]8 @3 Y0 R( g9 g. d方法解读:
; o) M) Z; ~. L( H; b- n, J: R下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
% j, R8 Z& Q3 O) z/ ^- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)3 [6 W# T. n# w, P9 u2 c3 r
- {; ]6 N. K& k& N G' v# C- p
- $enc = QRencode::factory($level, $size, $margin);- f% l/ Q G7 L8 L; u
- return $enc->encodePNG($text, $outfile, $saveandprint=false);5 Q# l7 Z, \( b7 X8 }0 m
- }
* R6 I5 X2 \9 [# [' B
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;) z4 g% ^3 j( c& U
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;0 w- q1 b* _7 d& `0 z7 H# ~, {, U
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
9 i! O9 Z7 S2 c# `) L5 K 第4个参数$size:控制生成图片的大小,默认为4;
0 I, I7 y" ^# |6 W' O 第5个参数$margin:控制生成二维码的空白区域大小;
/ l$ L7 l& V8 i, f7 e8 g2 @ 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
3 b' Y. s) W3 @使用示例:# ]8 ]9 ]# k) w5 T J
1. 生成二维码(生成图片文件) I) t7 U. v% o0 W/ ]
- // 1. 生成原始的二维码(生成图片文件)
% s# Z9 c; G/ f7 q& H - function scerweima($url=''){) L1 E* n$ Y; D# V0 W' |6 [
- require_once 'phpqrcode.php';
) o4 {4 L% t! j9 Z) k+ M( l - $value = $url; //二维码内容
/ v, a7 C' D' W- V- |- v - $errorCorrectionLevel = 'L'; //容错级别
! `$ B; @" ]- r7 i5 X% f& f - $matrixPointSize = 5; //生成图片大小
/ o& O$ r5 e0 |( o0 Z8 U - //生成二维码图片* d: T1 X% ^% e2 _2 z
- $filename = 'qrcode/'.microtime().'.png';. b/ |' z0 v7 v' Q1 K
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);! h( S- V j& w( k
- $QR = $filename; //已经生成的原始二维码图片文件
5 F0 c9 R [$ A8 N( w - $QR = imagecreatefromstring(file_get_contents($QR));
4 q1 a Z+ d2 \ - //输出图片4 G' y; V; r; Y+ J. B5 p
- imagepng($QR, 'qrcode.png');
: U; E0 I" u* ]3 O7 c - imagedestroy($QR);; H, k" J& n, D* _
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
' S$ {5 ?$ o" r- W3 [+ r - }1 _- ^/ v) B2 {; z2 J" s- \
- //调用查看结果6 [5 b2 ]1 S4 V; ]) n; v
- echo scerweima('https://www.baidu.com');
5 C2 j: ]5 j Z6 f! ~+ Y
复制代码 2. 在生成的二维码中加上logo(生成图片文件)6 X8 z) Y F- v, V0 [* F
- //2. 在生成的二维码中加上logo(生成图片文件)$ w! R* K( H& Z. s# B, p
- function scerweima1($url=''){
' f4 b8 M/ p* a5 ^; N - require_once 'phpqrcode.php';
% ]2 N9 w6 | v4 W# G7 v - $value = $url; //二维码内容# P) F- y& y2 p/ m* C
- $errorCorrectionLevel = 'H'; //容错级别" |' H4 @5 ?. S f
- $matrixPointSize = 6; //生成图片大小8 {7 K1 d5 v' _+ @" l# ?" E: f @! @
- //生成二维码图片
% A: k6 j! I: v8 y - $filename = 'qrcode/'.microtime().'.png';
( K% R2 i9 E8 Z* y G" s - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);3 d6 M+ Q) j- E; w x
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片
3 \. C$ C3 g; [9 H: @" t% R - $QR = $filename; //已经生成的原始二维码图7 D8 b' [2 J% Z
- if (file_exists($logo)) {
" m9 l+ a' X5 z, x$ n - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
4 G9 L$ o, s' F! ^9 N: V( V+ d - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。 o! n! h9 J S' x7 q; y" x2 L
- $QR_width = imagesx($QR); //二维码图片宽度6 r c, W8 e Q; X1 H) L
- $QR_height = imagesy($QR); //二维码图片高度
& O: u. @, q& _; ` U( Z- ^5 o! q; H, ] - $logo_width = imagesx($logo); //logo图片宽度. [, X" v8 f- g# a1 U: @
- $logo_height = imagesy($logo); //logo图片高度+ C& G- K3 g4 p% u% V) p
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)6 S, |8 p5 ^3 w
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)3 C' `( h( f. E4 P7 Q; K0 C
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度3 H0 J5 s* e3 O
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
% `) y# Y' `- z# E - //重新组合图片并调整大小
' t+ _. ?) G2 z3 z8 ^ - /*4 B) U( X9 j4 J8 V% n* w& ^
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中4 k( i4 d9 a# m$ x) z) \
- */4 E3 o$ H2 D: v3 H* f" L# G
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
9 L1 s* W8 k* c - }
& i: j7 A/ y+ \( _1 j - //输出图片4 j6 ]2 ?& Q; Q7 k
- imagepng($QR, 'qrcode.png');
7 X# b3 i4 h. S( H2 z& K6 \1 }0 { - imagedestroy($QR);
1 ?! O+ D" [& l+ K' c/ J - imagedestroy($logo);- `8 c! r c* x" |7 u$ O9 d
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
% w9 G7 y* W% \ o - } R. F& C( {7 g9 {4 j
- //调用查看结果
]) j- o% N# g9 Q; ]1 O) O - echo scerweima1('https://www.baidu.com');
2 E. j q! Y) E7 N3 S9 z/ ]* L1 Y
复制代码 3. 生成二维码(不生成图片文件)' U. ]! y$ ^& s% r6 {/ }
- //3. 生成原始的二维码(不生成图片文件)9 g; _/ U# O) @& ?7 p) j
- function scerweima2($url=''){* f* B0 I; }1 g- e8 V/ }
- require_once 'phpqrcode.php';. Z1 Z2 B- U6 g$ a0 a
- $value = $url; //二维码内容
G2 x b4 K: E/ L - $errorCorrectionLevel = 'L'; //容错级别# G& j. H! M" W/ V- }
- $matrixPointSize = 5; //生成图片大小
- ]/ ^/ |; Y. h9 A* z# O1 A0 S: } - //生成二维码图片1 |! |; W5 R$ R+ @
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);0 w$ W. y3 ~, p7 B( N
- }
) G1 z* j \& @0 F4 W - //调用查看结果
Z7 m7 }; J6 J5 `5 |1 @9 k - scerweima2('https://www.baidu.com');2 o3 U4 [" u5 A0 d
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
6 h9 J+ I# R8 n7 Q3 pPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
0 S5 M& g; C# Y8 @在线生成二维码工具(加强版)$ ^* z( O8 R0 I
http://tools.jb51.net/transcoding/jb51qrcode
/ c4 R, ] ` b8 Y, H: X在线二维码解码识别工具# l ]3 X! Y2 \, [
http://tools.jb51.net/transcoding/trans_qrcode
& K% O |! Y* W' y9 d- I- A0 _1 ]) e- s0 K5 S9 D, t
- Z3 g7 I2 @# j# v
' S4 O8 |: _3 y' b: G$ O+ u
* Y' B! c% Z( E; n. ~
# c$ E' C0 V3 a( d% A5 @& l |
|