管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:* k" n4 O4 O" A1 c; D+ Y
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
- Q5 w% B( K% t3 u# X$ l前期准备:* x5 d- @; u; J
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
4 F8 X( }+ N' ^$ N( I" l: D 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)1 v' ^4 D+ ~: y
方法解读:5 W) \" W! N# }; @: ^. R
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
* q0 K2 b: W" i8 K" Q; c# ?- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
6 o; E! ?6 y0 m# }2 ^! m6 J" z& k9 ] - {1 U, v) E2 ?- x, x8 N
- $enc = QRencode::factory($level, $size, $margin);8 w) x/ P& ^% G1 x
- return $enc->encodePNG($text, $outfile, $saveandprint=false);9 ], E7 t7 Y6 r0 @
- }0 e; g, g- T+ N+ S9 N
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;5 B2 i# z. W+ l; f. i% n) |
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径; J9 {! k' [& z
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
o5 ~ |0 K- b; Q4 Y4 V 第4个参数$size:控制生成图片的大小,默认为4;
/ X0 b; u3 g& d, w! ]$ E 第5个参数$margin:控制生成二维码的空白区域大小;
$ j1 O! Z5 q/ [* V# F 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;/ x+ {6 d3 `# W' Q
使用示例:
1 @4 X) C0 \! G6 U1. 生成二维码(生成图片文件)
+ B; l- @" w8 S* j A- // 1. 生成原始的二维码(生成图片文件)
2 y& r O, v6 ~5 I% C7 P - function scerweima($url=''){. R, L A( E3 h4 [- y, ^2 u$ g; H
- require_once 'phpqrcode.php';$ M( l; y/ z/ w0 l. t7 c
- $value = $url; //二维码内容
% A6 C& i. @. @2 y) o% j - $errorCorrectionLevel = 'L'; //容错级别
0 {: G% D/ A2 b# }& F - $matrixPointSize = 5; //生成图片大小* T) U4 c& w% `: c2 A
- //生成二维码图片
8 h. u, H: N6 }* j- V! c8 J8 g - $filename = 'qrcode/'.microtime().'.png';
; U% D, n: x U0 o* ~ - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
) U- F" P2 |+ b* K) m* I - $QR = $filename; //已经生成的原始二维码图片文件
7 L4 e3 }6 Y+ {5 j- J - $QR = imagecreatefromstring(file_get_contents($QR));
2 t; R1 L, {. h" |: z - //输出图片
; q x7 z, W) m/ s& z" ]( { - imagepng($QR, 'qrcode.png');
- _4 I+ h8 h- o. X3 ^8 e0 U - imagedestroy($QR);
) H E3 Q( f9 _7 t& A - return '<img src="qrcode.png" alt="使用微信扫描支付">';9 `, b' R; Q! d7 C! z S
- }
/ j( U$ F) ]# |( a G$ S - //调用查看结果2 V3 \" {6 {, W3 {4 b
- echo scerweima('https://www.baidu.com');
# r. Z! W9 m/ x& i4 Z% m. s
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
* V6 `0 D. V' p& n; u5 U. v- //2. 在生成的二维码中加上logo(生成图片文件)# F; n3 \. [: t8 U
- function scerweima1($url=''){
6 D" q2 p0 Z4 G) L' `& r - require_once 'phpqrcode.php';# d+ ]0 d5 K) \" z! r
- $value = $url; //二维码内容
- ^! l3 u) w3 | - $errorCorrectionLevel = 'H'; //容错级别
& q# J% ~, K" {. @8 q: \: j/ x - $matrixPointSize = 6; //生成图片大小- A& M7 c) k" L2 W8 h; h) f3 g
- //生成二维码图片) l; j7 C6 V- T- S' o. v+ f! |: S/ c4 f
- $filename = 'qrcode/'.microtime().'.png';1 p J$ l M3 r( c) Y8 o% w' ?
- QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
: |$ y) A. J" v6 I, j - $logo = 'qrcode/logo.jpg'; //准备好的logo图片3 ~% {: A+ _. m' K: W* a
- $QR = $filename; //已经生成的原始二维码图3 d) a8 }- h; ^5 e" _
- if (file_exists($logo)) {
% }$ p6 t( }3 J# Q7 @ - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。+ o; O1 T* S# s! w
- $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。+ n9 u+ l( X/ P: Z
- $QR_width = imagesx($QR); //二维码图片宽度2 ]4 R9 y3 a7 p7 |! S
- $QR_height = imagesy($QR); //二维码图片高度
. N# S4 @/ c" A4 s( f6 S: ^ A - $logo_width = imagesx($logo); //logo图片宽度3 Q7 f; ~; f' i! V( X. K; {5 t
- $logo_height = imagesy($logo); //logo图片高度( w/ D# Y6 L$ u; d5 z5 ^
- $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)! _5 l9 x1 a( @
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
8 n# Z- v$ Z& `$ i4 L& ~ - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度0 h v7 H' r; j6 i8 e: b/ H, [
- $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点0 {6 u. h; T' J# K( L3 ?
- //重新组合图片并调整大小: {) J, K, J; M
- /*4 G8 @5 Y4 U" M3 V- o) }
- * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中9 O. u2 E) ?& z$ R
- */
. }% r. v1 J$ \$ Q) v @ - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
" K. i2 @; w& v' y* M! L% |8 r - }
0 o1 R1 ~' X. T - //输出图片% ]0 N8 {: B r$ s4 W% m# F
- imagepng($QR, 'qrcode.png');, z. ?3 M- S* w( _! [; u K
- imagedestroy($QR);
* Q! {" O3 u1 f# R) o! O - imagedestroy($logo);
; b0 R/ o! {6 U# Z+ l3 N$ e - return '<img src="qrcode.png" alt="使用微信扫描支付">';
; [5 H# k0 Y: J1 E - }% U, U8 D; `7 }) \" ]- [7 W+ I6 }
- //调用查看结果
& c# p' S& b2 a - echo scerweima1('https://www.baidu.com');
! N: F& V8 Z/ o( {3 w% l
复制代码 3. 生成二维码(不生成图片文件)
8 I5 C3 Y4 F/ d! [8 m- //3. 生成原始的二维码(不生成图片文件)
; G/ t% h! t3 C+ T6 _8 { - function scerweima2($url=''){
1 m9 J+ D- d& m, t t I( e - require_once 'phpqrcode.php';6 V; o3 M m5 M) K
- $value = $url; //二维码内容( @( o9 O; M* c% K A5 o
- $errorCorrectionLevel = 'L'; //容错级别
' n$ r7 w* x1 Q3 q. v& F) h - $matrixPointSize = 5; //生成图片大小
7 X4 q* U7 \1 Y1 J - //生成二维码图片. g/ k- F. q& b5 I0 r5 I
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
# x% P( | E* N - }
3 r! [! E* s7 h* o# ? - //调用查看结果( \" y: J$ \+ W1 i) e
- scerweima2('https://www.baidu.com');
% ^& u* N. q( q( }( {
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。1 ^ v! m) Z9 l. |
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
8 [# I$ q" F0 t& Z# `7 N: N+ J在线生成二维码工具(加强版)6 A% G% r& U/ h; t; w
http://tools.jb51.net/transcoding/jb51qrcode4 S& P* N3 ?6 L2 _$ p
在线二维码解码识别工具5 u% p$ ?6 x) |5 P3 L' f
http://tools.jb51.net/transcoding/trans_qrcode( h6 Y+ B; F2 E" i: D
* O) j% x" _. t" {7 F( M1 M6 h
) Y& F8 w1 w! g7 b
0 a& F* v/ p4 p V8 M
K% G+ R/ G* G* q+ ?
0 ^& i k F% W' h+ S
|
|