管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
2 u6 a# Q& O0 M! p! B使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
/ }/ v0 o! @+ B# ?前期准备:
# `, s* h. s8 t: b4 C; G1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/5 A) P" R, N4 A+ |
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)+ W' X7 m3 E) b) E0 W& N" m3 {2 \/ j
方法解读:
# }6 m, ?. W6 u9 [4 `下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
0 F4 o& W) a6 I6 m- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
7 V" s' _( H/ @- ~$ g/ e& P - {; p' q! w/ `7 f& G7 a# O
- $enc = QRencode::factory($level, $size, $margin);2 n. r. Z) X( X* P( r) H: T \9 i5 P7 }
- return $enc->encodePNG($text, $outfile, $saveandprint=false);
" [( Q3 w# y% n# Z& ] - }
1 \. V; S+ |' U. q
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
/ R/ h, T5 V/ n! M1 X+ Z% B 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;0 ?; P; B: H/ `: a8 s+ i/ |4 q6 W3 c
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
- d7 W7 U: }6 O$ E 第4个参数$size:控制生成图片的大小,默认为4;+ Z+ O& |' s0 g
第5个参数$margin:控制生成二维码的空白区域大小;
8 ~0 O& L; A# u& |; W5 W 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;" g& }3 @$ B$ J( \
使用示例:9 {7 t" z( @ b* @
1. 生成二维码(生成图片文件): D3 c% k* n! l
- // 1. 生成原始的二维码(生成图片文件)
# Z5 J+ T3 @& A* P - function scerweima($url=''){
; f9 s* P" N* f - require_once 'phpqrcode.php';
/ C* }. s$ S0 a( M - $value = $url; //二维码内容
0 `( |3 ^7 F1 `* b - $errorCorrectionLevel = 'L'; //容错级别
, ?) u, H& v5 [$ k% N$ I; ]# E& @ - $matrixPointSize = 5; //生成图片大小
, l+ W9 |/ ~1 E$ R* s - //生成二维码图片" V; F5 B X# r
- $filename = 'qrcode/'.microtime().'.png';& S z+ B6 u- q) A9 `5 j; `1 {( W
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);# y4 i- H& W$ O4 Y& h, K) @
- $QR = $filename; //已经生成的原始二维码图片文件2 N9 K$ @* A0 Z
- $QR = imagecreatefromstring(file_get_contents($QR));5 q9 x1 r- a1 w/ M* ?
- //输出图片# Q8 h; G [) S3 O+ X+ m% ^& t
- imagepng($QR, 'qrcode.png');8 w5 `" I& `: d! o# C% {8 {6 m; j
- imagedestroy($QR);2 n/ N+ `* A" x6 A; A! H
- return '<img src="qrcode.png" alt="使用微信扫描支付">';/ g+ d r; W8 F' p
- }
5 e! j5 e O4 b3 F3 G - //调用查看结果
* u! j7 k7 X& c* @ - echo scerweima('https://www.baidu.com');
6 i' B8 {3 Z7 t+ x+ g9 c* F: H
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
1 B( R" l! X8 h( g6 k5 K+ ~4 [- //2. 在生成的二维码中加上logo(生成图片文件)9 u& e- z4 g# H0 M, u: g4 N- t
- function scerweima1($url=''){
( S% W! I* Y A0 }6 o1 b( i8 D - require_once 'phpqrcode.php';
+ q1 s# K! s j ~ - $value = $url; //二维码内容
7 I! `2 J8 Y m: V( m5 }' m9 B - $errorCorrectionLevel = 'H'; //容错级别4 Q; P7 N6 L. [( ^0 T
- $matrixPointSize = 6; //生成图片大小' n' C7 p. s7 e
- //生成二维码图片
( _' {, T) t" T1 {7 i6 p- t - $filename = 'qrcode/'.microtime().'.png';
8 R+ q( ~8 o* }+ e - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
% }6 ^5 j d; n - $logo = 'qrcode/logo.jpg'; //准备好的logo图片8 X5 j+ [7 d' y* q9 M/ Z5 I- L4 W
- $QR = $filename; //已经生成的原始二维码图
0 Q5 h6 a. @* q. i, k U - if (file_exists($logo)) {
% I: o( C- b( e8 a4 t3 F4 s' T - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。) c7 N" |6 R- T. h
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。# u; \, f0 E5 e
- $QR_width = imagesx($QR); //二维码图片宽度( c" u. p% J+ d h1 M' E
- $QR_height = imagesy($QR); //二维码图片高度
4 J7 h6 N& | i+ Q% D! f& D8 ^8 a4 P! k+ y - $logo_width = imagesx($logo); //logo图片宽度( k6 G# j0 o& q/ C2 O: x
- $logo_height = imagesy($logo); //logo图片高度- T2 u9 v5 W; w& H( s0 s
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)$ r% P/ z7 V: L$ [5 u. v8 x6 x# O* t& v( X
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
8 |6 \# z9 a. e- u. l - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度3 j a+ Y0 b# C/ g6 t
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点. f- V5 t" B3 j4 F9 ]% ^
- //重新组合图片并调整大小 q" _; y# r8 f; W$ J# ~1 s1 ~
- /*2 ]8 m1 ?/ ?5 L6 \& M8 G
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中1 `* _3 j; T3 E3 u
- */
# b; C; B/ O* {( f - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
/ q4 C% ^! P' m- i' q; R - }
9 g$ Q9 B+ m* q+ D2 m9 I - //输出图片1 S7 W; ? A" Y, Y9 e/ `+ s
- imagepng($QR, 'qrcode.png');
' ?0 N( _% @/ y2 \, G - imagedestroy($QR);
$ `) P- j2 {& {8 t2 g" B - imagedestroy($logo);
: U% F4 ~- F/ r, ]1 L - return '<img src="qrcode.png" alt="使用微信扫描支付">';5 C+ K' {1 O% {# J. n
- }
1 @7 ~/ Y) P# S+ a { - //调用查看结果
5 L; L2 K0 i: @1 f4 j - echo scerweima1('https://www.baidu.com');
/ s0 a, M/ ~# \) h) W4 s
复制代码 3. 生成二维码(不生成图片文件)
, c& x, m8 C9 b Y! P- //3. 生成原始的二维码(不生成图片文件)4 X+ @# V B/ I8 E5 s! n
- function scerweima2($url=''){
2 ~8 u* t0 B; A3 f! P6 W s% u# C5 q - require_once 'phpqrcode.php';
: B( }) t/ j f. @6 I9 G+ j) K - $value = $url; //二维码内容6 U. V1 l* Z0 p) B8 S. f
- $errorCorrectionLevel = 'L'; //容错级别
. I' O2 z8 {% l - $matrixPointSize = 5; //生成图片大小
2 g \; t! {- o# i. j/ e - //生成二维码图片
, M6 `' s C( P5 U - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);/ D9 V9 O9 y( A9 j) {
- }
$ N* M& H$ l q& A N - //调用查看结果
' _: H1 Q$ K P% t- [# v" A! d2 D. t. I - scerweima2('https://www.baidu.com');5 i8 r. U1 n9 R# s& v6 u
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。# C0 x" R- H; l/ b2 i2 ?
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用: X! }' y, Z7 n
在线生成二维码工具(加强版)
4 j9 s C/ y* i/ s- Y8 Jhttp://tools.jb51.net/transcoding/jb51qrcode
6 A' p/ ?+ t7 S* z/ y& p+ S' n在线二维码解码识别工具( I2 g5 K7 {7 E
http://tools.jb51.net/transcoding/trans_qrcode; S8 Z. M9 |4 Z7 w( n6 f
2 K" Z! `- j& j" Z, G
+ g( p* n; S( Y4 g$ D* }
' V' @9 |& ]1 r) \
! |* H+ \( J! v) v9 V& R6 L. B5 E9 A! ~+ H, B; I# C
|
|