本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
, J# N% }$ ^2 m% Y$ h. ~* L9 j! z. D使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。/ e0 A3 }1 M9 H8 v
前期准备:/ J" G, [6 D4 B3 g5 E+ n: Q
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/1 _, G% d' [' W5 \! E" l2 Y
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
: X: \' F3 m( ~5 \+ L6 g方法解读:
% }+ t7 h( c! o8 ^* h0 ?下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
6 m5 \! O" @% L! _& W1 n- public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)9 t. k' ^ l+ Q
- {5 l+ z2 E1 \- E, X& d
- $enc = QRencode::factory($level, $size, $margin);
- [ ~: z" `+ p* W - return $enc->encodePNG($text, $outfile, $saveandprint=false);
6 u) ^" h2 \; L7 z+ X - }! b8 `) F- A) M8 y! K
复制代码 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
E2 p: U: T, V 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;& l) i' e6 `9 [1 v1 `
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
8 ^* R4 |$ P; ~: F3 [. G 第4个参数$size:控制生成图片的大小,默认为4;
; X% i6 b) d' A6 F6 B0 n 第5个参数$margin:控制生成二维码的空白区域大小;2 I# _/ G3 m, ~
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
" i8 A0 Y- a' x3 h使用示例:
! l8 ~# r$ s, m1. 生成二维码(生成图片文件)
0 ?) B- P) S, x- // 1. 生成原始的二维码(生成图片文件)3 K S: W4 _& O4 a/ L& h
- function scerweima($url=''){
8 A7 p5 z. x1 D! _ - require_once 'phpqrcode.php';
9 ~* Q9 b7 X3 [( u, `4 o+ c r - $value = $url; //二维码内容0 v! `$ Z0 L2 m3 Y
- $errorCorrectionLevel = 'L'; //容错级别
$ t8 Y1 h: o3 I6 x. K - $matrixPointSize = 5; //生成图片大小
0 D2 P5 @1 p' z3 C$ [! ]! h- i& v6 p - //生成二维码图片
9 Y$ V0 S4 I& U$ x - $filename = 'qrcode/'.microtime().'.png';
" Y' q# j' M* K2 { - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
/ @. A4 `: } q. x! T ]0 X- e3 L - $QR = $filename; //已经生成的原始二维码图片文件
. H" T4 H+ a& d6 f5 C! ^* o( }; `2 h - $QR = imagecreatefromstring(file_get_contents($QR));$ U% M8 k! F+ v
- //输出图片
/ x2 t+ L6 o9 s u/ ^' _3 ] - imagepng($QR, 'qrcode.png');
" Q4 t, p1 q, a: C5 t) V# R - imagedestroy($QR);, o& M' {" k7 y2 R3 w
- return '<img src="qrcode.png" alt="使用微信扫描支付">';0 P* l. B: d# _! J4 k
- }- M* }: h- H) m2 N7 u
- //调用查看结果* Q& G2 }/ w- T5 K6 x
- echo scerweima('https://www.baidu.com');, o- g8 D# i% o8 n7 g, O
复制代码 2. 在生成的二维码中加上logo(生成图片文件)
! O: q4 U3 K! n5 E3 L. ^- //2. 在生成的二维码中加上logo(生成图片文件)$ K6 h9 N+ A7 g/ ^: s/ }
- function scerweima1($url=''){( d: `; d- S" z; S' K u
- require_once 'phpqrcode.php';
' Y: b# |5 K& z& A - $value = $url; //二维码内容& @2 ?1 K) n$ ^0 E$ s1 I# Y
- $errorCorrectionLevel = 'H'; //容错级别1 ?2 c( ?/ I' o6 ^7 S; F! S% z
- $matrixPointSize = 6; //生成图片大小# d) k1 y( K& Q( _ t" V9 e! n
- //生成二维码图片
3 ?9 ?5 D7 m+ m) _9 N - $filename = 'qrcode/'.microtime().'.png';
4 @4 I5 ^7 b# W7 H - QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);5 h+ l" X9 ]1 S1 b" P: f* c
- $logo = 'qrcode/logo.jpg'; //准备好的logo图片
4 P& H+ \6 b$ X5 d - $QR = $filename; //已经生成的原始二维码图
/ O1 Z9 g( K6 w1 F" k - if (file_exists($logo)) {
0 B- I* ]3 S. p - $QR = imagecreatefromstring(file_get_contents($QR)); //目标图象连接资源。
6 c4 m# w! a% _+ B& X. {# Q - $logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
9 |# z. l) b+ D3 P7 j - $QR_width = imagesx($QR); //二维码图片宽度; _& R8 f% [1 ~- U0 ]
- $QR_height = imagesy($QR); //二维码图片高度) [/ k' z7 J: {! R: }2 z- {- h
- $logo_width = imagesx($logo); //logo图片宽度2 \2 o3 R B1 n8 m" m
- $logo_height = imagesy($logo); //logo图片高度
/ u. o' l3 ^8 Y - $logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)# S# T5 t5 i J
- $scale = $logo_width/$logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
& [0 b9 t- T* U - $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
/ {# y( L& l- M4 e4 h8 w - $from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点( n: |$ B" |' D
- //重新组合图片并调整大小. i& Y7 a8 }; v; w
- /*
@% Z2 U0 M. v6 `3 u* Q - * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
0 M, E2 I2 W( k, C; {5 t - */
; `; V' K5 m7 `% b! l+ |% _ - imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
2 Y& { H; z7 v% F5 u7 ] - }6 Z, c+ H2 i' _' B
- //输出图片
0 I; @! v1 H g - imagepng($QR, 'qrcode.png');
. z5 m d4 H( W2 m# s' p( w9 ?3 v3 N - imagedestroy($QR);
% E; G" a3 Z$ b l - imagedestroy($logo);
5 S) k, m$ x, F7 C9 A - return '<img src="qrcode.png" alt="使用微信扫描支付">';" I1 v! r0 P8 h3 U0 P( J
- }: i) R, a O2 B. b' z* j
- //调用查看结果
3 M g. J3 ]- l8 y - echo scerweima1('https://www.baidu.com');. n c& V6 H f$ O) H' L% v) @" e
复制代码 3. 生成二维码(不生成图片文件)+ ^6 k8 @5 H* m T4 G, H/ }
- //3. 生成原始的二维码(不生成图片文件)
( `1 ^) J8 \4 c0 _2 ]7 D - function scerweima2($url=''){
6 \/ {" p9 o H7 k" o - require_once 'phpqrcode.php';
) Z1 D6 u: I% q! o% h - $value = $url; //二维码内容4 [" X+ W2 h: @ _/ g& y
- $errorCorrectionLevel = 'L'; //容错级别
8 H' R7 V% X% K1 i8 j, N4 J - $matrixPointSize = 5; //生成图片大小
) u$ G+ l$ B; B* C/ f - //生成二维码图片 E' r) {) {/ H% J3 }
- $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);! @8 M) {3 c$ ^# `. C3 i
- }
( N2 ?/ ^4 }7 [7 ^" ?4 M - //调用查看结果4 j3 S/ K2 S) h! y4 t2 P9 M5 w; n
- scerweima2('https://www.baidu.com');
+ g) W7 x& t; J3 F: W, Q! y
复制代码 前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。 J1 e0 D' J* Q% d8 H! l" Z8 Q3 `9 [
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
0 e* f8 _! G4 M* k" Z: F/ g在线生成二维码工具(加强版) z+ F7 m1 D: v% v
http://tools.jb51.net/transcoding/jb51qrcode
! D0 N, V% d# i在线二维码解码识别工具1 Z3 P, B$ F& V* W; a
http://tools.jb51.net/transcoding/trans_qrcode' U) B% ]/ X3 q8 n4 }1 E9 I' x& `
2 p( q# M) t9 s3 [2 e V$ A" ?1 I7 C) r/ Y
( |+ w+ w+ [# x7 f7 U4 f* ?3 A! s/ j. b" t/ I) c1 w, {- O
9 g4 t$ p" k5 j9 A i" z
|
|