本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下: u% Q1 m! l% n$ I( g# X
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
/ ^, l2 F/ j, ]( x前期准备:
& `5 X' X8 Y5 x2 @1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
& `$ W6 G+ W3 b3 e$ |) n 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)7 h6 l; Y% Q4 u, t4 L4 C8 R! A& G
方法解读:
+ i! \. Q( b; t8 j! E/ b9 [0 x下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):5 N4 U1 B( m% @7 ?5 E$ S) x2 D! g
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
2 q# \) {: m) y" T- q% v" ~ - {8 }4 ]& p* p6 G8 G4 i! x
- $enc = QRencode::factory($level, $size, $margin);
: G! ~ G) _: Q& U! z3 y1 [ - return $enc->encodePNG($text, $outfile, $saveandprint=false);
0 R# E5 R- n% Z3 J% g - }
( l+ I( A9 h: Y- W9 Y
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
& | X) y8 d' v& I3 r2 [ 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;% K1 n% B0 L( K7 [0 u6 f
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;6 I/ X* Z+ v) @5 l% W
第4个参数$size:控制生成图片的大小,默认为4;; P" V. C3 ]5 q5 u- e" G E
第5个参数$margin:控制生成二维码的空白区域大小;
) ]: R2 R9 W# v 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径; s; _6 ?6 m" o# [
使用示例:" @7 z/ m% [6 P, d
1. 生成二维码(生成图片文件)
( r! F* p2 b/ A/ r [$ C& J& Q: @- // 1. 生成原始的二维码(生成图片文件)
- V. I2 F$ L% z- ~ U - function scerweima($url=''){" ~8 G$ @9 W6 A. d: S
- require_once 'phpqrcode.php';
5 f+ b1 C6 s8 e4 T8 ? - $value = $url; //二维码内容) x B: q+ r0 N
- $errorCorrectionLevel = 'L'; //容错级别
- H8 r6 I- c. n, }5 _ - $matrixPointSize = 5; //生成图片大小, [6 K5 t- v0 e: `
- //生成二维码图片* H: F3 [6 o& Q" C1 G( B
- $filename = 'qrcode/'.microtime().'.png';
. D' v. v; h2 U* x* d - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);) B* |6 t) G: W6 y1 S
- $QR = $filename; //已经生成的原始二维码图片文件
% U* I. a: T9 b& M1 o& [ - $QR = imagecreatefromstring(file_get_contents($QR));- X+ w% V N+ t# V
- //输出图片
; O A0 D- p1 U3 {9 Y! h: V - imagepng($QR, 'qrcode.png');
8 D) L9 ]4 V( ^( b9 w - imagedestroy($QR);" Z0 [# v' z ~
- return '<img src="qrcode.png" alt="使用微信扫描支付">';+ J% q3 N3 ~1 s
- }, M" e5 M& A4 G0 D) f+ y+ G/ O1 h
- //调用查看结果
; ~* k; n$ `7 z) r6 u - echo scerweima('https://www.baidu.com');) K" S1 c; v% N- j. G" P
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
7 c( v0 O' P, _' N( {1 o& B! M1 }9 D8 g- //2. 在生成的二维码中加上logo(生成图片文件)" R8 U& Z- `" t: x: A$ M, \
- function scerweima1($url=''){
/ I, R. I# F$ K; _ Z. V - require_once 'phpqrcode.php';# S7 z8 ^* i, x2 I6 e h2 y% y* o5 C
- $value = $url; //二维码内容
# E/ Q% |. P- w h$ A2 y - $errorCorrectionLevel = 'H'; //容错级别9 @8 h# Y3 p* q+ q$ X8 D& }2 I
- $matrixPointSize = 6; //生成图片大小
& c$ ?* R# C' H6 T7 @ - //生成二维码图片4 P2 Y7 c- ]$ M. O8 G' B! S5 o
- $filename = 'qrcode/'.microtime().'.png';
/ H" _# Z1 v8 _. }8 ~' i - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
- c) h6 \6 ^* Q7 I: E - $logo = 'qrcode/logo.jpg'; //准备好的logo图片" c) ?8 p4 s8 b/ ~
- $QR = $filename; //已经生成的原始二维码图% C3 l( ]7 \( S" E+ h
- if (file_exists($logo)) {
9 }! \- ~' i$ [1 k/ y - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
6 L% W# J$ x& S% k - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
1 O/ z: S( N% X5 X - $QR_width = imagesx($QR); //二维码图片宽度1 |) Y, o# [) a; J
- $QR_height = imagesy($QR); //二维码图片高度
% T0 z6 g: i& \) H - $logo_width = imagesx($logo); //logo图片宽度) e+ k) H6 t3 f9 x0 r; I1 {; s/ o ~
- $logo_height = imagesy($logo); //logo图片高度 d% h% x7 s' k* R6 d
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)$ J$ M1 R8 }8 D @- d
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
3 h B, F- j$ l7 x( v - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
( b2 f( O" w! d+ w+ t - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
4 l# Q% P) y) u7 g& g8 m, [! g - //重新组合图片并调整大小
) e; ]; Y4 I) w6 D9 A+ W% [ - /*
2 g( M; G- r0 Q8 j. E - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中' H+ q* r, z5 V$ F9 i3 g
- */4 U/ t$ z5 W, K3 {9 [3 A
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
) v4 S! Z+ D1 M% Y. f j - }4 G; |% L, E2 U9 ~% b$ [2 ~/ I
- //输出图片
* s+ U. v# E$ T- ]; D$ o M$ s - imagepng($QR, 'qrcode.png');
. @! Q8 u! R, O* q1 _ - imagedestroy($QR);
+ e4 k2 E5 V# m! I2 z5 f - imagedestroy($logo);; N+ r/ d! f6 [4 o4 g- t
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
7 O2 h8 a6 B% I/ D) R( @ - }6 h5 p* s) U x- C1 S' }
- //调用查看结果( S; `% P& |8 g" B
- echo scerweima1('https://www.baidu.com');! [6 r3 `; @. T' O2 V/ v) `7 ?
复制代码 3. 生成二维码(不生成图片文件)3 `' v" y9 Z0 H; b; }2 S
- //3. 生成原始的二维码(不生成图片文件)
1 l& H( ` m5 V' T - function scerweima2($url=''){
. y( b& y4 `$ D& Z - require_once 'phpqrcode.php';
" C( `/ Y- v5 G+ C0 M - $value = $url; //二维码内容
/ [; j( U1 G' h' T - $errorCorrectionLevel = 'L'; //容错级别
4 b5 l3 [- F3 Q- h# [+ E, a - $matrixPointSize = 5; //生成图片大小. j, }* x2 ^4 W" [
- //生成二维码图片
* |$ {1 v- r! t - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);7 [/ {5 n8 ?3 U
- }+ `; O7 M6 _' w- f
- //调用查看结果
* O& f" t9 P: N# [ - scerweima2('https://www.baidu.com');
" o: \% S$ B' } x0 F* e _
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
/ m- `6 `+ }! E0 ZPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
9 i& k2 U+ ]' q* w/ ]+ I/ \+ ~在线生成二维码工具(加强版)
6 G9 D& l: S: M2 o( d) X- Yhttp://tools.jb51.net/transcoding/jb51qrcode6 T. s5 y) @8 O2 ^. ?, a8 L1 A
在线二维码解码识别工具" }+ F% {& ?9 d' n& Z
http://tools.jb51.net/transcoding/trans_qrcode I- [; s; g( u" n$ n/ C0 H
. Y: g5 {2 H! h @& [
" i' X1 ~! C3 Z: p* N# w7 u. U5 l; p0 {$ ]
L) q6 w* p- e! J, g( D- g& m) k3 x- N
|