您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

PHP基于phpqrcode类生成二维码的方法详解

发布者: admin | 发布时间: 2020-7-20 21:02| 查看数: 11574| 评论数: 0|帖子模式

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
5 k9 F2 M4 M, v, V" [4 E$ H8 Y9 [使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
! @/ l1 X1 d) Y前期准备:
2 s& F+ {/ n  W; o8 k% G1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
. B# F' T8 n  W5 q, Z  H 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)- O# G$ I  t" A+ T! P2 \
方法解读:
) M. I+ X' E& F下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):. O% n4 z7 c, |, W  H+ s
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)! p8 _) Y1 V& |4 ^" k* i( ]
  2. {* N% C$ h0 S- J% B
  3.   $enc = QRencode::factory($level, $size, $margin);
    - S/ \% I& k- {" u! h2 a' K( }
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    3 M, G* @9 M. Q3 D3 t$ p- |
  5. }. k- Q8 i) b) |; R
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
: F9 z9 T6 Q" C8 B7 x) P6 b 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;6 h! i% [' m& Z$ I0 N0 m# ~& d
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;( S( x; r* x5 l2 J! l( J
第4个参数$size:控制生成图片的大小,默认为4;
) ?) `' d. o6 S) \! ~, H 第5个参数$margin:控制生成二维码的空白区域大小;. B* P9 o, s: X+ A3 }& R
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;9 u! M. r& B' B5 h( d4 F
使用示例:; O. m8 L/ u7 M( {5 \( b# h
1. 生成二维码(生成图片文件)1 M' j2 T0 v: r
  1. // 1. 生成原始的二维码(生成图片文件)* T. t9 r, B( ^) b* D
  2. function scerweima($url=''){4 L- q+ G( r0 z+ r, V! O- r
  3.   require_once 'phpqrcode.php';' [8 ]& S1 y7 k7 A. h
  4.   $value = $url;         //二维码内容
    1 D4 T) B! ^9 Q& Z
  5.   $errorCorrectionLevel = 'L';  //容错级别
    + `7 q. g* E2 x0 N! {/ w" z
  6.   $matrixPointSize = 5;      //生成图片大小- B/ ?" J8 V& ~) U
  7.   //生成二维码图片
      o2 L. H. H' D& ~# N0 a# U) `
  8.   $filename = 'qrcode/'.microtime().'.png';
    + D; g, s) u3 H6 y
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    $ R& @% j! q  f; l/ n/ ~% E
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    2 o, ~6 Q3 E, S* b
  11.   $QR = imagecreatefromstring(file_get_contents($QR));" c! ~% l# t. \& \+ s
  12.   //输出图片
    / O# g" h! f7 V8 h; c- j$ i, J
  13.   imagepng($QR, 'qrcode.png');
    ! A. P( V7 _  L, H3 V2 ?, d7 @
  14.   imagedestroy($QR);
    1 s4 F: v- ~; g
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    ! I' J9 @. j0 }! K4 h2 Y
  16. }
    1 V" ^% k* v/ }6 j9 p
  17. //调用查看结果- }8 F0 }8 D; v. J; s7 ~
  18. echo scerweima('https://www.baidu.com');
    ( Q" u$ J+ M0 \. ^- H1 E
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
- l* }# ?) |3 q) t4 a7 X! r
  1. //2. 在生成的二维码中加上logo(生成图片文件)# n  S2 C" u6 ]- D+ T
  2. function scerweima1($url=''){/ R$ y9 q  I# f0 |. M1 W
  3.   require_once 'phpqrcode.php';
    2 t0 R+ z' R8 l, a0 ~1 w: k
  4.   $value = $url;         //二维码内容
    7 G. B: O9 C+ j* b7 B, G. Y
  5.   $errorCorrectionLevel = 'H';  //容错级别5 i2 D4 z( l% Z: P, `" K$ S
  6.   $matrixPointSize = 6;      //生成图片大小
    . q, R: m7 _  f9 }/ A% i* }& r4 o; W
  7.   //生成二维码图片. Z  C1 d5 U* e6 ~& Z6 F" Q9 W6 U8 Q
  8.   $filename = 'qrcode/'.microtime().'.png';' Z( E. s! X( Z. _& y1 K. {! B
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);4 |8 N7 p; Q6 S: Q/ ~
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    ! Z# }5 k% k& s: T* a$ }
  11.   $QR = $filename;      //已经生成的原始二维码图+ Q5 V6 E  Z6 Y* S" l
  12.   if (file_exists($logo)) {
    ( U7 ?- u1 R3 V/ b, g  z
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    # d* S0 Q7 a- I; e: N% P) N
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    : |" Y+ j" X* h
  15.     $QR_width = imagesx($QR);      //二维码图片宽度# z1 x2 X8 i% d/ }0 O0 T! S. R
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    : N: w" e* s& }' [% S2 g/ l0 Y, E
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    ) j/ p( ?5 W' F0 ?/ H
  18.     $logo_height = imagesy($logo);   //logo图片高度
    . `, D/ z* y. i8 B( R
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    - O# ~5 k( @5 t/ }+ }
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)( }  B9 W( z% f( _: i5 q5 W' `1 `, n& h* t
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度5 _4 `! a2 @$ ]2 _. h  s
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
      C' t7 A; I& p3 l
  23.     //重新组合图片并调整大小/ s; J7 u9 P  ?: n
  24.     /*
    0 O+ E( n; {. V* ^: {
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    7 v" M0 p- X  ?$ S; x4 F
  26.      */
    6 @" ^8 G( U  q, U: D; Z
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);  |8 o, A3 X7 Y0 I
  28.   }
    : x$ V( F# h& A  Z/ y# b' {7 S+ y: _
  29.   //输出图片" W  `+ b9 D5 q
  30.   imagepng($QR, 'qrcode.png');
    6 `2 K9 ~1 \4 J; C% q+ k
  31.   imagedestroy($QR);
    . C; s( J! d+ w/ `! C$ p# u2 Y- |
  32.   imagedestroy($logo);
    . L5 ~0 [# j& c" Q7 `# c# K. `7 b
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';8 e, t3 z, W: q3 L# ]
  34. }
    8 j$ U, A# N7 `# u, i
  35. //调用查看结果0 ^6 Y7 r+ T: @, p7 v; v
  36. echo scerweima1('https://www.baidu.com');
    2 D0 ^$ G& ?+ ~& G1 d; d5 S
复制代码
3. 生成二维码(不生成图片文件); W9 S1 _) S% O0 \& y- s1 z
  1. //3. 生成原始的二维码(不生成图片文件)5 ^! c- t0 {9 A1 b  g4 o/ t
  2. function scerweima2($url=''){
    . W7 A, A! J& [" l2 K) T% f# L
  3.   require_once 'phpqrcode.php';
    3 y% m' \% {9 ~& i( o
  4.   $value = $url;         //二维码内容
    + Z! L2 e$ `1 W
  5.   $errorCorrectionLevel = 'L';  //容错级别; l; O3 ], k4 S
  6.   $matrixPointSize = 5;      //生成图片大小
    9 b; ~  c0 E0 [  K5 c
  7.   //生成二维码图片
      q1 ~3 z3 t* y  a
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);3 ^5 a* R4 H: b9 S  v  z, O( h$ e
  9. }
    + C0 g5 `2 V5 [: M; K) \2 \
  10. //调用查看结果
    " A8 c' i! s5 I- |6 B5 a
  11. scerweima2('https://www.baidu.com');' \5 W; Q$ p8 t0 e* v
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。; j1 v2 W& C0 T9 j& Q
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:9 H+ a" ]1 Y* Q. ~  \% W
在线生成二维码工具(加强版)! r# z( W6 m# p% r) X% C) a
http://tools.jb51.net/transcoding/jb51qrcode7 j' T/ x0 c3 G( r5 Q; W4 x# ~
在线二维码解码识别工具
% _+ V. v4 B, L$ n
http://tools.jb51.net/transcoding/trans_qrcode5 a8 a" q. o2 K  I

5 P& g: _% }) B) V+ l8 F; m- s% c

, ^. b* z# Z- V% c/ r# C- g- f" t' V# t+ e. p) e

% ^* m, _1 l5 h9 P7 b. h3 f

最新评论

GMT+8, 2025-1-13 05:33 , Processed in 0.106517 second(s), 20 queries .

Copyright © 2001-2025 Powered by cncml! X3.2. Theme By cncml!