管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:7 M( @$ y& V" J/ X/ S0 l' i! Y C
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
8 L* W3 q$ W' r" s前期准备:" @0 S2 f( y; x( c
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/+ a4 u4 I9 W* D$ c( X
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
{, h( R6 N ^. D( m1 y: h: z) O. ^方法解读:
9 S. n/ v$ ?+ a/ N; X7 W% p0 y. p/ s' h1 q下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):6 j- \( |# P- ?" y8 f. r+ s
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false): X2 W0 v! e' \. B( }- e3 m% F3 F( `
- {
( v$ G9 L" B, E; p) f - $enc = QRencode::factory($level, $size, $margin);
; v1 ?' o5 t( l) E0 k" Q - return $enc->encodePNG($text, $outfile, $saveandprint=false);
. j* t/ f$ N7 _( m( j - }
( B% g0 C8 b0 v. [4 |
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;2 X4 F7 R$ F8 A$ y. t; a& H
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
f. @/ J. R0 k( C- s4 P 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
, @8 Y: [/ @& t/ r$ ^$ E! o) ?( g 第4个参数$size:控制生成图片的大小,默认为4;1 _- r4 N# N, g z: ?) |
第5个参数$margin:控制生成二维码的空白区域大小;
# R% l2 R- ~$ N3 Z2 w+ w# k 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;1 S9 u0 M; q* i. ~ t& u
使用示例:0 }, w9 X' n* _% K
1. 生成二维码(生成图片文件)5 D# L' I: c% V: _. C7 C
- // 1. 生成原始的二维码(生成图片文件)
0 W5 E5 I ?- ]. S! {1 ~# L) K; R - function scerweima($url=''){7 j# f: s5 Q, v! Z# Q
- require_once 'phpqrcode.php';6 w( z( E6 }5 t& h
- $value = $url; //二维码内容
! n: |! j+ |% ?1 _ - $errorCorrectionLevel = 'L'; //容错级别2 l% {: v8 P6 g; [# z# F5 A; T3 X& S
- $matrixPointSize = 5; //生成图片大小* X5 b/ ?$ T9 g- V7 G6 N
- //生成二维码图片3 y2 u: o' `# K0 L
- $filename = 'qrcode/'.microtime().'.png';9 l% B6 D9 V/ j/ V* I% ?" k0 U' a' y
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
& ~( Q7 Z; I* i- u$ [/ X3 U. P - $QR = $filename; //已经生成的原始二维码图片文件
$ F1 [- I8 v9 ]9 c( u" Z - $QR = imagecreatefromstring(file_get_contents($QR));( e p2 o. Z) O0 T6 T
- //输出图片
0 y' v2 f0 q( p/ L9 [0 f5 A+ s - imagepng($QR, 'qrcode.png');% W6 L$ V# T; K% e
- imagedestroy($QR);
3 l# m$ l- s- L+ e& F5 {; w" n - return '<img src="qrcode.png" alt="使用微信扫描支付">';$ G4 ~/ a/ C; ~* j
- }
/ `5 G, }. B. N) l: a" ?3 C - //调用查看结果6 C: [3 @4 [* ?7 v8 {, l
- echo scerweima('https://www.baidu.com');% H7 O2 @9 T1 {4 A/ `6 e5 ?
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
& h0 E( G2 j' d1 o6 p5 Q# W7 |) p- //2. 在生成的二维码中加上logo(生成图片文件): z. \4 u( ?1 J6 g7 l: u
- function scerweima1($url=''){
! T. t: K) v/ Q9 {. _ - require_once 'phpqrcode.php';* r* C) y. b. n6 J2 g, b: h' V
- $value = $url; //二维码内容
" s, L: Y9 |0 }2 [4 {$ p4 j - $errorCorrectionLevel = 'H'; //容错级别
9 X. w( D6 n |8 L! c/ j; J; O - $matrixPointSize = 6; //生成图片大小
' t4 M: s( C( }2 h - //生成二维码图片
3 I k$ Z, w* B* B1 j. e0 G - $filename = 'qrcode/'.microtime().'.png';
# T! m7 X; Y+ U( Z& p - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);& l: |2 C1 |' Q, p
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片
2 I+ I8 v& ?6 H, F1 A* e# I. V2 {- O - $QR = $filename; //已经生成的原始二维码图/ y; d1 ^3 o1 W, Z$ Z
- if (file_exists($logo)) {. S8 @8 F8 x( A: [2 J* o6 X
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
0 g9 p7 u. m5 R/ S1 T3 d/ K' F - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
0 O0 }# {9 f5 `) W5 } - $QR_width = imagesx($QR); //二维码图片宽度
/ J3 [; @% T' @: o/ \& P - $QR_height = imagesy($QR); //二维码图片高度- e m7 w* T) v& N
- $logo_width = imagesx($logo); //logo图片宽度
: X5 r9 M9 d H* J$ U2 W - $logo_height = imagesy($logo); //logo图片高度
, J( U# Y' t0 }! g6 D2 ]: R" l - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
% M7 w& o& a( W4 I8 l% }: q - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度); W9 s+ U- |5 j( h, a
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度1 v) f' |; z& `3 M7 w5 v
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
' X/ q2 N! Z/ O7 c2 W - //重新组合图片并调整大小, g9 t' D y; Z+ k; K- C
- /*2 P; M \' W( t b
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
& T7 [ T- ?) _8 h' S& ^ - *// ]/ H3 h/ l% g$ e/ d/ G
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);3 V( q1 M6 j" U
- }; O3 o7 L. L5 f4 M
- //输出图片+ h: G4 @* N& y P' j$ ?9 q1 H# \
- imagepng($QR, 'qrcode.png');
+ ]0 K3 ?5 _1 G" ^2 j( ? - imagedestroy($QR);
* G/ q7 _$ U$ @1 q/ E$ ] - imagedestroy($logo);5 Y {8 C1 e: L2 y, o1 L, J4 ~, M
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
( p4 `* T) _( z% O0 R" ]3 H+ o. M - }" N8 H4 w9 h3 l4 Y" A4 _; X+ o
- //调用查看结果
, j! l" e- |& k; v. l7 }% [ - echo scerweima1('https://www.baidu.com');* w2 G" J& v( E7 r. O9 l+ N8 w
复制代码 3. 生成二维码(不生成图片文件)
6 k6 P0 f! ?0 x( w' j( G6 r- //3. 生成原始的二维码(不生成图片文件)
) o( W% d) m& }$ o2 Q; L. t0 d l, l - function scerweima2($url=''){
% U; F2 G/ r' m. V) b& e# M. J$ ? - require_once 'phpqrcode.php';
, \" W8 n ]* X8 q( F. { - $value = $url; //二维码内容
) E0 r4 s" j; H7 b) ?1 s - $errorCorrectionLevel = 'L'; //容错级别
( K) n7 ~& L, u1 Z$ y, V$ s - $matrixPointSize = 5; //生成图片大小
2 \! y8 E8 l- Q) ?7 e' A; ]2 I - //生成二维码图片2 a6 c5 ^* z' n7 [4 z s: S
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
D: [+ V0 e9 a H. H0 L - }
$ r% p* q. t; w2 U3 n - //调用查看结果
/ x1 S M3 o- f8 F - scerweima2('https://www.baidu.com');
, d2 B# M9 U4 X* W. B1 A6 a
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
1 }7 U0 z$ g$ n" ]: u: P6 o: D6 ?# kPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:/ `) b0 w) |- D$ m9 l
在线生成二维码工具(加强版)
3 e& u# p6 z! Phttp://tools.jb51.net/transcoding/jb51qrcode
) g" W( H _" I% e: R& L1 l在线二维码解码识别工具
$ |% x* Y- d4 o# l& G" {6 A2 Ihttp://tools.jb51.net/transcoding/trans_qrcode
# J8 k) @5 q# a: ^, q$ P/ w; K6 r8 G+ F) J) q1 i% W4 R$ E- Q
& q b4 c( ~6 P* Z; v4 W% E. j: P
0 F( R4 G! h. w. I t1 I
1 C) s7 M9 P8 Y0 d; h; X" i/ |4 A( K4 o
|
|