管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
( F1 ~/ T. H: C2 z* }5 q使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。7 f- U3 H1 X- T, k4 u: i* a1 k
前期准备:
( S! q e2 J8 p! q& e1 o+ d S1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/0 d9 e- k- I4 G- f* s8 l# \
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)9 O- @! I J! r$ |( M. d
方法解读:: d6 H; T+ j0 M4 K- ~
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):* z/ ]# s9 ]- S/ u; }+ h
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
: k d1 f% g+ [; p. e) [% z7 g - {+ @: }. A1 I# Q; G' J
- $enc = QRencode::factory($level, $size, $margin);1 a3 n% W0 \2 H
- return $enc->encodePNG($text, $outfile, $saveandprint=false);
1 z6 J. E/ i7 q+ o - }+ H9 h0 J" W, a l' J4 }
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
, U, o ^& {, t& {( o! w 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;9 _, O' _& L, _: A
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
, P3 g# E0 h' D. P; l8 ^$ } 第4个参数$size:控制生成图片的大小,默认为4;
) R- m3 O6 s* q l 第5个参数$margin:控制生成二维码的空白区域大小;
) u- C) G" |8 J9 o 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
- i7 r. q2 L9 J2 K0 n使用示例:) B+ w+ h: M0 z
1. 生成二维码(生成图片文件)* p' u9 e/ h. `: h! R2 @
- // 1. 生成原始的二维码(生成图片文件)
( v* j+ C1 P0 K0 U: i6 H# f - function scerweima($url=''){
# |. O: h0 |) a1 a1 ~ - require_once 'phpqrcode.php';& ?# E% e* `0 l! G
- $value = $url; //二维码内容* M7 \2 b( R. ^5 C
- $errorCorrectionLevel = 'L'; //容错级别
7 ~& \& z* P( Q$ S% K. I N - $matrixPointSize = 5; //生成图片大小% t( v2 s2 a4 h8 d. y. U
- //生成二维码图片
( }' T Q" r" T$ x$ N - $filename = 'qrcode/'.microtime().'.png';
: O+ l7 b. P. N. N' t* O2 ~ [ - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);/ _7 q ]. K. R3 h& R* N7 ~! U8 y
- $QR = $filename; //已经生成的原始二维码图片文件/ A Y; u% L( R' z3 P
- $QR = imagecreatefromstring(file_get_contents($QR));
4 s6 I* Y {9 `( n* U& P P( y - //输出图片5 a1 y# Z- q1 m8 H1 F
- imagepng($QR, 'qrcode.png');) n) W. x6 K7 V: N" m& a8 \
- imagedestroy($QR); K/ Q! R- q4 y+ Z8 ]! \: D. d, O1 [4 ^
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
* U5 s3 h( Z# i0 @. f0 H1 ~; c - }
* B6 A/ {( w; ~: T' ]9 G- s - //调用查看结果
0 J- l: G' N) l. ~4 Y6 d, K - echo scerweima('https://www.baidu.com');
7 L7 P! H) X4 l5 u/ g0 C* O5 S
复制代码 2. 在生成的二维码中加上logo(生成图片文件)1 s" h! N/ Q4 r! T! L4 Z% t* j
- //2. 在生成的二维码中加上logo(生成图片文件)
/ o% @& K% @3 u4 s8 \" o" Z g - function scerweima1($url=''){
- k( ?. I$ X5 O, J - require_once 'phpqrcode.php';
5 T" p0 X) E5 l; A$ H8 Q - $value = $url; //二维码内容
$ [: h' m* X8 | [6 h - $errorCorrectionLevel = 'H'; //容错级别
1 {) `9 e" p3 l3 K - $matrixPointSize = 6; //生成图片大小/ W) p6 L* u0 j7 R
- //生成二维码图片3 M j/ m/ _! e. g, C
- $filename = 'qrcode/'.microtime().'.png';
l M& ]) \8 _' Q. K4 ` - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
, T& _$ n% u/ ~ l - $logo = 'qrcode/logo.jpg'; //准备好的logo图片7 p4 F3 K% p; n* I) |; G# B. z& H
- $QR = $filename; //已经生成的原始二维码图
9 X7 L# q S4 S( g ?3 F - if (file_exists($logo)) {. [ U: ]) i* [* o) Z4 ^2 H
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。: v. J9 y$ K4 f9 X0 {
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
1 [' x. }: L3 P- F! s! n& k - $QR_width = imagesx($QR); //二维码图片宽度
2 U8 B1 ^* _8 b% J' K$ I - $QR_height = imagesy($QR); //二维码图片高度& G6 J3 W1 p* b% _1 [7 T4 h
- $logo_width = imagesx($logo); //logo图片宽度
1 H* a; r5 H; O% q3 m - $logo_height = imagesy($logo); //logo图片高度8 l. F) S- v0 `9 [0 v9 Z: `
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
6 D9 }+ X; \9 X; w# a - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)2 b1 f8 b& E I& X# _( e
- $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
8 @: u: s: |* ]7 r9 s - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点3 E1 a# y6 [" F. M3 ^9 Z% A* s/ Y
- //重新组合图片并调整大小' I! ]( F. P2 U5 f4 _
- /*
+ ?3 ~ a! Q4 s; ^4 n. y6 d - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中# i' |! k% q6 _8 S9 P5 N$ e
- */
3 X7 X4 T# U9 K8 o! g% x2 O - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);( K' g$ F" n' R2 ~; H8 \0 ?
- }- m8 S, i7 b: g7 e5 G( v! a
- //输出图片
) ]4 U6 ]4 W5 N( g- l9 ] - imagepng($QR, 'qrcode.png');
& h% L1 _4 r) d7 p2 S# M' b# `; F G - imagedestroy($QR);
4 a+ T; I% H2 S/ o( W( L - imagedestroy($logo);7 U% [; W! N$ N p
- return '<img src="qrcode.png" alt="使用微信扫描支付">';5 Y1 n$ {" {: H1 ~) A2 U4 \
- }
: u1 e- }7 D; C5 T( j - //调用查看结果
: w! T7 f( S$ H1 K1 t* l/ c. E - echo scerweima1('https://www.baidu.com');* R4 ^$ N1 l' F! z
复制代码 3. 生成二维码(不生成图片文件)- U% b8 ~5 r; L3 s9 ?0 J
- //3. 生成原始的二维码(不生成图片文件)
8 O" `& y" N5 n5 Y5 b$ X - function scerweima2($url=''){
6 p7 p- T$ r o$ G - require_once 'phpqrcode.php';4 ?. j0 e& P# q
- $value = $url; //二维码内容+ Y% s4 P4 D8 P* K6 c; R0 f
- $errorCorrectionLevel = 'L'; //容错级别
# _# U9 W& ?6 Q8 X3 i6 {6 { - $matrixPointSize = 5; //生成图片大小! v3 ^, D" O5 s2 _$ o& R4 g6 C
- //生成二维码图片& O9 G; x3 }8 _
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
' M' J& i3 }' r: y! A7 N8 A - }
2 w* k3 I# A' D: }9 m - //调用查看结果6 D' L( J# W& `/ {
- scerweima2('https://www.baidu.com');" j" k1 e# q; c. K
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。: u, Q5 F6 M" h% }0 F" G% G# O+ m, ~
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:4 E/ C8 U* k( \: j& G5 u2 S
在线生成二维码工具(加强版)# c& Y6 w% s9 W4 S5 \. e5 F3 F
http://tools.jb51.net/transcoding/jb51qrcode$ D: v; C8 w# ^+ |, X# b
在线二维码解码识别工具" i3 x8 H2 v' v# V; M. G6 ^
http://tools.jb51.net/transcoding/trans_qrcode2 p- x- P) X& D9 I" K7 f
* y: p2 |- H6 C; P) N/ j2 J' k: L3 s2 Q+ a6 `0 I
( R, x9 _1 S6 k0 p3 w1 [
& E [& ^/ \4 H7 z: j. W; l
& U: I, i( H; @$ R" a" ^
|
|