本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
' ~ }; }! V- x使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
( {+ L! Y+ F8 l, u1 K5 k前期准备:
+ d+ ^0 E- ?8 q4 @1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/7 @, Y1 M0 t! K z
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
. v7 G# b( V2 I方法解读:0 a. r; A/ L0 ?' v- W: a9 H
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):+ H) X9 }3 ~7 G5 M. n
- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false). {( H5 z! Q9 N9 C4 M
- {
! S0 P2 z2 j* l8 b# U* S7 v5 ]) K - $enc = QRencode::factory($level, $size, $margin);
( G! n8 d" I0 e$ |$ w9 g - return $enc->encodePNG($text, $outfile, $saveandprint=false);8 C* P# B( u' G+ D# D" O
- }7 h, u* { d2 P+ j2 U0 W# Q% L
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;, E) ~$ J" g; p% [" u# L+ s
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;5 l; K6 N% M, O
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
2 J+ Q* F! }( V3 C' `8 ] 第4个参数$size:控制生成图片的大小,默认为4;5 G# X( A: i L* K8 V* V
第5个参数$margin:控制生成二维码的空白区域大小;
+ o" h6 Y( r$ p" Q6 w5 j1 `- L0 | 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
- W$ ~7 A2 n; r; c& I- `使用示例:
5 X! q& R$ j( O/ R0 L8 k1. 生成二维码(生成图片文件)
; m* f+ M! H9 ^6 }3 ]- // 1. 生成原始的二维码(生成图片文件)
. d( W* T7 \ }! C, f5 T/ Y - function scerweima($url=''){0 H- ~9 N) w& O
- require_once 'phpqrcode.php';2 X" j7 b* G' t; `3 j# X$ h
- $value = $url; //二维码内容
9 y; S4 L8 J! @" b# Z - $errorCorrectionLevel = 'L'; //容错级别2 u) t; @/ d0 A5 d+ R; o. }
- $matrixPointSize = 5; //生成图片大小0 r i7 a3 e. p0 j! i9 Z! T
- //生成二维码图片( f" ^ C: i5 a7 F' c' E8 J0 Z: m
- $filename = 'qrcode/'.microtime().'.png';; K. ]5 o; C' `( s9 V$ N) w9 w: P
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);' W, n% m8 c- W0 K
- $QR = $filename; //已经生成的原始二维码图片文件
5 q/ ?4 j8 g( M- ? - $QR = imagecreatefromstring(file_get_contents($QR));
5 E% q4 T8 f5 G5 a - //输出图片: |+ O6 I7 w/ U- [* E/ e
- imagepng($QR, 'qrcode.png');
p, {* z2 n0 j7 Y: p! E2 B - imagedestroy($QR);
, t; c1 H$ I" D* t# l - return '<img src="qrcode.png" alt="使用微信扫描支付">';
j, c- C* [6 y5 [+ L( S3 d2 K - }( @/ P/ R( Q8 u# w1 T, Z
- //调用查看结果
+ E# R Z5 M" k% H4 Y - echo scerweima('https://www.baidu.com');$ q' ^- M8 c& b* G5 }: E# B
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
; t E; j+ G8 v* Y& I# G1 }- //2. 在生成的二维码中加上logo(生成图片文件), [3 C! O K- j" F5 s2 P
- function scerweima1($url=''){5 I, f3 O* Y: w5 V( V5 x+ i
- require_once 'phpqrcode.php';# p3 o) ~$ @' I( g9 z
- $value = $url; //二维码内容
' E% R! S. k3 E) w; L3 [. T; M - $errorCorrectionLevel = 'H'; //容错级别
& d1 R- n5 q/ x3 b# k( S - $matrixPointSize = 6; //生成图片大小
9 F# ]( n3 A& |( [) Y! C - //生成二维码图片
: k& Z+ r$ Z# [' {6 w - $filename = 'qrcode/'.microtime().'.png';. N3 d% z7 r- k1 ]; U
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
1 h- {- [/ j7 I5 {6 Y8 | - $logo = 'qrcode/logo.jpg'; //准备好的logo图片9 A# R2 p% y+ k7 e
- $QR = $filename; //已经生成的原始二维码图- k) I/ S# s$ g% g) j# T0 B
- if (file_exists($logo)) { P% k, s/ {' @. j. a; S: F
- $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
! H) n$ E- t$ { v+ S - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。) k, x" ^+ q+ Q/ X. L
- $QR_width = imagesx($QR); //二维码图片宽度
+ N# r4 m6 Z& H0 N: E - $QR_height = imagesy($QR); //二维码图片高度: p7 u4 x7 G) F% {: c! y, V% B
- $logo_width = imagesx($logo); //logo图片宽度/ |8 F* L) ?7 K' h& c& l& T
- $logo_height = imagesy($logo); //logo图片高度
8 @/ ?* T! S U; M. r; j$ E# D% ` - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
) W" q& d& P+ \& G7 ^ - $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
* S5 o) r8 y+ a; t/ D2 x2 a - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
& j8 F$ t5 [4 D - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点) T( e' H) a+ S
- //重新组合图片并调整大小
7 r8 K6 o+ ^ f6 R" x- d - /*
& _( M( g B# m - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中3 X* i6 ^3 [) T5 l2 [
- */4 U7 T8 ~' t+ l. O' N5 k9 }
- imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
& X9 n7 K, R/ Q: c - }
6 N/ z$ A8 t3 w# U' ?( w - //输出图片
) L7 i( F7 [3 X - imagepng($QR, 'qrcode.png');
9 J4 e9 Z& s5 x5 Y - imagedestroy($QR);
( d+ `7 I4 s! ~ S: b: Z/ x U - imagedestroy($logo);$ {% E- a1 g) t, m% J
- return '<img src="qrcode.png" alt="使用微信扫描支付">';
3 b8 Q6 z& j) S/ M/ a V3 C4 r - }, L, n4 V: ~7 z3 ?8 C
- //调用查看结果3 ~" o4 _9 \, ]
- echo scerweima1('https://www.baidu.com');4 S, e& H6 ~) W* T1 ^
复制代码 3. 生成二维码(不生成图片文件): b9 w7 H5 p4 ?: D& ^& d' C4 E- }
- //3. 生成原始的二维码(不生成图片文件)$ V: O7 ^& @) P' l+ v
- function scerweima2($url=''){% i3 ~+ w4 o' G6 A+ ?) U Q
- require_once 'phpqrcode.php';
, V! c& v7 u6 y - $value = $url; //二维码内容
( v1 E" C$ |) A0 K! r: K# [ - $errorCorrectionLevel = 'L'; //容错级别
' b( ?1 Q9 R5 L) f9 c* o - $matrixPointSize = 5; //生成图片大小$ }; X7 a# A9 p8 p$ m1 ^" Y4 U
- //生成二维码图片
0 Q" z0 @- H+ E$ f: o - $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
7 `, C/ m" J. X. L0 ~ - }5 w& Z2 a( v ]# q0 U: j4 q# f
- //调用查看结果
; S* M$ N" D# M, _" w - scerweima2('https://www.baidu.com');1 B7 f* Z( H. T/ Q% U; E. O" w
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。% h. v# R& w' |. p, B
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
5 C1 e: h0 s9 L0 v在线生成二维码工具(加强版)
* y" ^; R" W% ahttp://tools.jb51.net/transcoding/jb51qrcode
* } h9 J4 s) A6 K在线二维码解码识别工具
' R/ c' {6 L4 Y8 i9 Thttp://tools.jb51.net/transcoding/trans_qrcode
0 \: O m% D1 P8 B: y8 q# ]( y6 D: \ Q1 T
1 ~+ O% i9 z& i/ F- T# A, c/ u- d' _# Z Z
& ~1 ]1 K( U2 K( f
* v6 {5 x- e/ W' {, ? |
|