管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:- J+ ^$ p# n7 d. j% D5 ]1 F; V
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
" c2 Z' b9 L C; L9 \前期准备:. u0 H! g% u6 c: q+ A6 K0 O
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
& U7 R" r0 k' k: w: v& M3 C! K 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态), l0 w2 f5 u! f# u# r
方法解读:& @( N* T9 H( P% G( Z5 i
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):$ |; M' K0 I4 n, X9 e D5 L
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)& S5 B. ^% J9 R5 D% `; @
- {
' V" K* y, @7 R& c - $enc = QRencode::factory($level, $size, $margin);- x q n( e$ N" O, \9 B6 P% J. A
- return $enc->encodePNG($text, $outfile, $saveandprint=false);
/ x R) e! M2 u) T1 s. L* x4 Q - }. z. F! N$ ]1 d2 n
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;6 @- D) S! o8 }
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;; N- P, ` w, F6 i6 I
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
* T7 S/ e) o! O0 J# |( Z 第4个参数$size:控制生成图片的大小,默认为4;; x0 J& v/ P3 O* M' `/ V1 o
第5个参数$margin:控制生成二维码的空白区域大小;2 ~) ?5 E! U V7 i
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
$ T# ~" S, U4 A$ z) L& B使用示例:2 R% ~/ @, \; v6 w- q
1. 生成二维码(生成图片文件)
" T R6 m% j* A- // 1. 生成原始的二维码(生成图片文件)
1 @& P, Z0 O3 A8 ?- B - function scerweima($url=''){! S, K& {8 @) O7 b$ L/ P# B
- require_once 'phpqrcode.php';' H) i# q- C2 O" y3 [
- $value = $url; //二维码内容: }% G6 s7 ^& b. M* z' T1 g
- $errorCorrectionLevel = 'L'; //容错级别
/ ?; I8 c' a8 @* h' W - $matrixPointSize = 5; //生成图片大小; k' g/ [2 A* o
- //生成二维码图片
3 g1 W$ N8 u" L4 R5 g3 g$ Z( Y - $filename = 'qrcode/'.microtime().'.png';% }- r1 F- ]# u3 ^4 _
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
3 ^) D: ^6 Q' [) H - $QR = $filename; //已经生成的原始二维码图片文件3 b! B T) S0 C0 p. ~+ ?
- $QR = imagecreatefromstring(file_get_contents($QR));4 M, v4 R5 u# b6 P. ?' d
- //输出图片
0 p2 E4 Y0 o4 N. H - imagepng($QR, 'qrcode.png');
, c7 A$ H# v' V( U3 [ - imagedestroy($QR);
# g1 f5 K; H0 P* a) q% y( R - return '<img src="qrcode.png" alt="使用微信扫描支付">';0 X9 B7 [* u% e; ?8 P
- }% k/ u3 Q$ N0 ?1 E
- //调用查看结果. U0 r% o* N# [, a( i$ U
- echo scerweima('https://www.baidu.com');
6 j( _" `* }+ H1 C5 Q
复制代码 2. 在生成的二维码中加上logo(生成图片文件)4 C$ _7 b/ \2 k7 L7 I3 G" h, Q/ t
- //2. 在生成的二维码中加上logo(生成图片文件)
. S/ Y, u, H, [1 J% j - function scerweima1($url=''){( H6 ` O p |% h: ^
- require_once 'phpqrcode.php';) ]9 E' o/ d/ y, p2 p
- $value = $url; //二维码内容7 p, t+ H# ~- w, F0 J3 S
- $errorCorrectionLevel = 'H'; //容错级别; D6 ]6 L) n3 F+ U: _2 b" q, A/ T
- $matrixPointSize = 6; //生成图片大小
* R$ y& Z; ` g" l5 R% f: @ - //生成二维码图片1 C. Z* \# w* Q' q! f
- $filename = 'qrcode/'.microtime().'.png';
/ S2 a E. b: a* ] - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);- W5 x2 }% }- u3 P1 A' N. y
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片6 ]. I- q8 r* s& I
- $QR = $filename; //已经生成的原始二维码图
1 I5 D; [1 Q6 ?- M& C - if (file_exists($logo)) {
( f$ B& @2 I+ j. g% Q - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。, E( O% C& t. C% |' g
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
; Q$ V3 g3 R2 N7 M1 T! `* j# S2 N1 J - $QR_width = imagesx($QR); //二维码图片宽度0 A6 ?% B1 X- N9 J9 \6 m
- $QR_height = imagesy($QR); //二维码图片高度( }. W( y& M$ A$ i( ~# w
- $logo_width = imagesx($logo); //logo图片宽度
/ L& b2 O" b$ V" H2 w - $logo_height = imagesy($logo); //logo图片高度, d7 ~' o8 l- Y; l1 K' ]1 t/ u" J
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
% i/ R9 W% e1 W$ h% |6 E' H - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
2 m1 X, S* Z' i: K. i - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
# y6 l* |) H. T0 t5 Q0 F: B - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
2 k0 b: v3 s6 j! K - //重新组合图片并调整大小7 ~5 z8 j3 _0 P. i4 V
- /** n9 v1 a: o: [. G9 B
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
+ a6 D+ A2 e _ - */
& B0 g0 x. ~& J: T6 J W v6 T - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
2 I) Q0 R5 Q8 F. n1 K - }' |- U& e! {4 B
- //输出图片
3 w/ S( z0 @, ^, ^% q0 b - imagepng($QR, 'qrcode.png');
J6 }/ z0 E& u5 _: V# P' z - imagedestroy($QR);
[ p9 a Y& \ - imagedestroy($logo);+ I* Q' s3 I: k9 o
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
4 g$ y7 x% j7 ]! P - }
7 z: q: M# g) y/ d0 R - //调用查看结果4 f# i9 f! G; b: \, ]
- echo scerweima1('https://www.baidu.com');! q5 V1 X! G* O& s( [
复制代码 3. 生成二维码(不生成图片文件)0 a' v: V* v7 ?+ I/ y9 B
- //3. 生成原始的二维码(不生成图片文件)1 t* @4 t T" D* A8 ?$ H
- function scerweima2($url=''){
9 `) R6 V& n5 v8 k. b1 v# o1 {* N - require_once 'phpqrcode.php';3 p3 S% V2 J) b4 p; F! q# E
- $value = $url; //二维码内容
9 x( F0 J" `8 ~$ n! { - $errorCorrectionLevel = 'L'; //容错级别
; ^! v5 {8 Q+ l+ Q. H - $matrixPointSize = 5; //生成图片大小
! F- E5 J, ]% [6 L1 I% g - //生成二维码图片( j# b7 n. w1 b
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);! \/ F) g' h4 i. _( v7 r
- }% W- S0 `$ F: x+ L( S
- //调用查看结果
8 |+ [! ~. Q2 B5 S: v4 K( ? - scerweima2('https://www.baidu.com');; y# W2 P6 `: V" Z& K& Q
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
" @6 K5 ?. @; T; v. j# }% lPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
! g+ W6 Z" g5 L/ r s0 x+ i- q在线生成二维码工具(加强版)1 p3 s. s7 n2 W2 }* p
http://tools.jb51.net/transcoding/jb51qrcode
% f: T0 o$ L! Z1 D e3 L在线二维码解码识别工具, ~! E7 k( y! X- F/ R
http://tools.jb51.net/transcoding/trans_qrcode8 D. W ?' v/ ?2 n1 u" z
! C3 f, K0 H) k/ N& Z0 M8 S3 u( z$ r% P) h _& i
4 e9 u& i! c! {1 C8 {
0 d3 O! j7 h# d3 G
8 O8 H; b% G& e2 n0 Y9 {5 X$ l |
|