本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:9 S$ F, i& _3 q% H2 T5 F5 ]5 }
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
; K& c* I0 g3 e; y. [! w前期准备:
: V9 g# ~$ _. V* F3 W7 f5 W7 q1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
6 x& M6 K' C; x: \9 Z V 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)6 u% ]# k$ j- i1 K- t
方法解读:
9 _& Q6 f" a9 X! q6 K2 G下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):$ t+ _& N, u* J- R: U: h
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
1 J! I9 q$ Q$ p' n9 Q$ d - {: `9 W6 m2 V, |1 t( R
- $enc = QRencode::factory($level, $size, $margin);2 z7 l* N/ ^, H6 K/ N. @. O( {
- return $enc->encodePNG($text, $outfile, $saveandprint=false);% D' G: b8 C; ]8 v% h8 X
- }
' a9 z5 D5 A& D
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
: i+ Q8 `0 n% w9 _3 O. Z7 W 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
7 g% V/ J* D$ H! F9 g 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;3 R0 V1 g& E+ G0 B
第4个参数$size:控制生成图片的大小,默认为4;
" Y8 U+ ]0 P+ V# G3 ? 第5个参数$margin:控制生成二维码的空白区域大小;
5 Q8 i( b3 i) t& o8 T: ~4 h' s 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
" n: B1 \2 [$ Q$ J# ]* z使用示例:
6 u( u; @) v1 ~3 u: [1. 生成二维码(生成图片文件)
) W7 D- P8 K- E L- // 1. 生成原始的二维码(生成图片文件)( I& R: S/ p4 f8 p( [. q/ w7 s
- function scerweima($url=''){ c% S1 W+ C( l" k) z
- require_once 'phpqrcode.php';
5 C2 s5 T O2 I3 D0 a - $value = $url; //二维码内容 ~2 v5 |. G2 E" u+ d" E
- $errorCorrectionLevel = 'L'; //容错级别
* j( O2 ^+ h# W/ Y - $matrixPointSize = 5; //生成图片大小$ v3 g2 X3 o: u9 R" S1 @4 p+ w8 K
- //生成二维码图片$ ]' |. k1 ^- I' T4 o
- $filename = 'qrcode/'.microtime().'.png';
6 g+ a4 z; h( V2 q - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
6 m- _- E2 v1 _ - $QR = $filename; //已经生成的原始二维码图片文件9 ~6 E& _& S) r1 V" M
- $QR = imagecreatefromstring(file_get_contents($QR));
& c9 ]# i3 X! }2 ~% v - //输出图片& F& y! {0 Q' z" Y. H. _
- imagepng($QR, 'qrcode.png');* x" a. j1 I7 ? I6 E7 z3 D
- imagedestroy($QR);
1 s7 e& Y4 o0 }" M0 N - return '<img src="qrcode.png" alt="使用微信扫描支付">';
( H: Q h% Q; _6 i0 q - }: r* [7 k0 B+ O( R* x
- //调用查看结果" R3 G% i$ F) I1 Q6 r
- echo scerweima('https://www.baidu.com');$ F$ J( N5 x& g8 G k, G) B K
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
! ~( s! L6 X ~- ~- l0 H3 y; Q- //2. 在生成的二维码中加上logo(生成图片文件)2 ?" w3 {+ p! C$ r' ~+ H& A
- function scerweima1($url=''){
: m" k N' o# g' y3 F - require_once 'phpqrcode.php';
6 m; D1 E) I$ A - $value = $url; //二维码内容' `6 B% f6 J9 c" ^9 O) n5 m% @
- $errorCorrectionLevel = 'H'; //容错级别5 t/ O0 S2 j8 a0 u$ y- J8 r o5 u- p3 g
- $matrixPointSize = 6; //生成图片大小
5 u+ B e6 A$ w. @& q W. c7 M - //生成二维码图片
' X3 E# g/ m& g" O+ j9 o - $filename = 'qrcode/'.microtime().'.png';4 \/ {4 ^* g0 U
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
: k/ y1 ?0 F, ^; q5 M/ |& a - $logo = 'qrcode/logo.jpg'; //准备好的logo图片/ W1 @& z( h1 G- h
- $QR = $filename; //已经生成的原始二维码图
% W( }1 O# z8 l4 @/ {# ~1 X6 a - if (file_exists($logo)) {
; {) P* ~& P% o1 r- Q2 A - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。2 y! B* ]1 y8 i" P
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
5 k8 f/ o7 c# V/ C* `9 ]1 e9 i - $QR_width = imagesx($QR); //二维码图片宽度+ B5 H) C! N: x; A8 t, P+ F! d
- $QR_height = imagesy($QR); //二维码图片高度3 N0 ?# C7 q, y
- $logo_width = imagesx($logo); //logo图片宽度' q$ }0 {9 B5 i7 h* o9 A1 S: w
- $logo_height = imagesy($logo); //logo图片高度
- o& B7 Y; Q3 P+ ~5 c k ~ - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)' L9 ~+ A. f6 {# x, v9 j2 _
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
/ C9 d* q J5 r9 Z5 b - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度0 Q+ N* k2 E% w7 C
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
& {( p: J1 Z3 Q - //重新组合图片并调整大小+ U1 q3 {3 o. j2 Z5 y
- /*" W3 C9 q% x& a% j
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中0 q# z& S8 p. Y5 ~
- */$ T4 Y7 H! B! H6 _* z8 m* ~0 `
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);" G4 G8 V. N# c- \" r
- }
: L4 s: E3 f0 l' T' }% | - //输出图片% K8 D, ]6 N8 |6 K+ y8 w
- imagepng($QR, 'qrcode.png');. U1 g6 K/ B; U$ Q5 R
- imagedestroy($QR);
6 _" P ?. W, t' m - imagedestroy($logo);
[/ ? ]1 b4 ^# r) X, b$ |0 \' e3 E - return '<img src="qrcode.png" alt="使用微信扫描支付">';
+ h+ M% v7 ?2 t9 N8 s/ j7 \ D - }3 ^& x( Q, B5 P% I
- //调用查看结果
, _; r- m" w2 _* O" g - echo scerweima1('https://www.baidu.com');
8 r/ w" ]0 E5 c5 V1 _
复制代码 3. 生成二维码(不生成图片文件)
- n# S+ I) S) n D2 H, M+ \- //3. 生成原始的二维码(不生成图片文件)
N9 Q/ S0 a/ X; h, g% P - function scerweima2($url=''){7 i- ]9 Q. X: A/ J$ ]8 o
- require_once 'phpqrcode.php';
" v: j$ }. l9 ^& j$ |: I - $value = $url; //二维码内容
5 P( `$ o5 Q$ O3 \; S- n0 j0 J - $errorCorrectionLevel = 'L'; //容错级别. N' E ?5 r& A' C/ |5 u6 `
- $matrixPointSize = 5; //生成图片大小. T3 D2 |2 U5 A
- //生成二维码图片
# {' o7 w2 T Z, q/ I" q - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);2 m- M4 U5 m9 }
- }
" i0 y+ k" F# ?' v" D. j - //调用查看结果
, L) R0 T$ k1 x% V* ` - scerweima2('https://www.baidu.com');- f) q: }" O' J- ]; L: S( N G
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。& }, r- k0 i/ O) M; `2 s: U
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:9 G! E [6 E M0 F
在线生成二维码工具(加强版)
5 S% j1 r, K- X/ L" O& z' rhttp://tools.jb51.net/transcoding/jb51qrcode9 w* o; M8 \$ E+ l" m4 T+ {4 |
在线二维码解码识别工具
- N' x! S2 X5 Ohttp://tools.jb51.net/transcoding/trans_qrcode
* j4 H0 m q& i) v
0 J' \% N/ `5 \+ p7 f3 j* x8 m/ E' [9 m8 Q/ Z
9 K! V9 w% n8 h7 B
7 q6 v; o2 P* A- i4 \2 `! B! M U% Y8 n( Z j( U3 E. {3 l
|
|