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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15790|回复: 0
打印 上一主题 下一主题

[php学习资料] PHP基于phpqrcode类生成二维码的方法详解

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:4 o1 N- j1 [* f) o) H
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。# |3 {, t, W5 O6 J' Y1 O
前期准备:/ ^" ?' T0 E6 s6 {
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
% g. U$ R9 b# i# H  o  ? 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)3 H: y. P& R% F' x
方法解读:  \1 ~2 y7 X. V) t% x
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
( c, k! @0 Y: ^# y1 @* _0 a
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    1 K/ [% @9 y4 ~& h4 b
  2. {
    . }9 D1 F& V; ]
  3.   $enc = QRencode::factory($level, $size, $margin);
    " G# d- `2 e( ?0 y" Z: D( c
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    , f" K4 R: }' W* e
  5. }2 a) @) l' \8 [% v8 L- ~0 P
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
5 A( {# w( b+ { 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;8 x' g1 D8 F$ b+ {0 H
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;" I& e" O' Q: H% ?. m8 u! M
第4个参数$size:控制生成图片的大小,默认为4;9 V4 E$ J: h8 l) O! l, w
第5个参数$margin:控制生成二维码的空白区域大小;6 ?2 C' l2 D- a* W' \
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
/ k1 U2 ^3 s- U4 C) B$ y使用示例:
5 r/ D7 w( r; V& `$ P1. 生成二维码(生成图片文件). R; c. `4 B. ?, O3 Z& ]. k
  1. // 1. 生成原始的二维码(生成图片文件)
    & G2 C2 f' S' m
  2. function scerweima($url=''){7 m+ u/ v. y2 b/ ]
  3.   require_once 'phpqrcode.php';  F6 _- J* _' x) s
  4.   $value = $url;         //二维码内容
    ; A' B  D( ?) @1 A6 E$ b! v
  5.   $errorCorrectionLevel = 'L';  //容错级别: Z. G6 P0 l- T  K- P. n! k- A
  6.   $matrixPointSize = 5;      //生成图片大小: }. v- X% r3 Y/ K
  7.   //生成二维码图片* B; O. x! M% K7 e
  8.   $filename = 'qrcode/'.microtime().'.png';, J* g5 m9 A9 E1 U/ K
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);$ s1 b+ V* ], O+ O$ U( h- X
  10.   $QR = $filename;        //已经生成的原始二维码图片文件" u. O4 o4 Q9 h% |3 i' i3 M
  11.   $QR = imagecreatefromstring(file_get_contents($QR));7 z7 M/ a% n' A( j( Z. _
  12.   //输出图片
    6 y; M" m0 ^0 U6 z7 [( y
  13.   imagepng($QR, 'qrcode.png');+ j0 _6 z6 S) L6 I4 r' H
  14.   imagedestroy($QR);
    4 p, G# Z7 S. c! U$ d: g) N
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';" `6 X" }4 [; a
  16. }. U8 V+ Z1 r# W# f
  17. //调用查看结果
    4 R( \4 ?# \1 U6 g# e: m; C
  18. echo scerweima('https://www.baidu.com');! s! }8 Y: b/ W+ @, i
复制代码
2. 在生成的二维码中加上logo(生成图片文件); L5 A: c( h# g! G) M% c7 D' }; _8 z; l3 j
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    / U9 ?' K4 W4 ?5 x3 y0 {
  2. function scerweima1($url=''){+ K4 @5 v' ~# ]% L# P
  3.   require_once 'phpqrcode.php';/ j5 r1 J+ E3 X: `% c6 B
  4.   $value = $url;         //二维码内容  T2 K7 R- \- p3 Y+ ~: M2 d
  5.   $errorCorrectionLevel = 'H';  //容错级别, k  c& Y; ~% ^+ A! C' m1 A6 I
  6.   $matrixPointSize = 6;      //生成图片大小
    ) ~) {; {- a# s4 \
  7.   //生成二维码图片& W. g3 r" h+ `8 }# x% z
  8.   $filename = 'qrcode/'.microtime().'.png';5 m6 ?9 W& h2 M3 p- Y, x
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    / O8 }! m" l1 Q* H' ^
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片2 k$ R7 s* m+ [7 h2 P# w
  11.   $QR = $filename;      //已经生成的原始二维码图0 V3 O  x( V8 G* O9 Y; D. `* N6 d
  12.   if (file_exists($logo)) {
    ; r# E: d& P+ V8 x  n$ r  |
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。9 [( ?8 a2 u3 s, t
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    & S; v% i8 X3 G4 S6 V( j( b- C8 E
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    ( e/ k1 W( U2 y+ F& \, h
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    ( B4 X7 d$ m2 M6 T8 S
  17.     $logo_width = imagesx($logo);    //logo图片宽度- Q$ V$ w0 m, j
  18.     $logo_height = imagesy($logo);   //logo图片高度
    + R% Y7 }! I0 ~4 `# \$ {
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)# k5 {; r# s  f) P
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    & F' D% I4 L6 m7 \; h' h
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度* `# m, b- M2 O3 L4 ^. M
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点6 C; ~( ^: g- d) p# b% s
  23.     //重新组合图片并调整大小" P' U, T: S" k
  24.     /*
      C; A) H6 }3 L& @& g  H# W$ `
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    " V6 }( {  i+ r+ a
  26.      *// e1 M' f: Q. c& b5 O) l1 s2 Y
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    5 v$ @; E! l0 I# ~" S
  28.   }
    1 R7 a/ E3 |/ _0 n' }8 Q) R
  29.   //输出图片
    1 H. Z6 \: t( ^% q# R" [; q+ u- T
  30.   imagepng($QR, 'qrcode.png');, I1 [9 k" @* W* b2 z9 N+ f
  31.   imagedestroy($QR);, J* H% R/ V* w) E% E+ Q  O0 u$ e. d
  32.   imagedestroy($logo);
    8 H" c: n/ t  E# x& V& H2 |
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';# _3 z* `% B" N  R- W0 E  T8 I9 L
  34. }
    * U6 T6 b* `* `! j
  35. //调用查看结果
    7 y" |# k7 c# N$ q% ]: X
  36. echo scerweima1('https://www.baidu.com');) D" h0 M# o6 t2 Z5 G
复制代码
3. 生成二维码(不生成图片文件)9 a0 f) H' t1 v( i% h9 x2 }
  1. //3. 生成原始的二维码(不生成图片文件)
    ; p- \# i1 {  V6 i( A
  2. function scerweima2($url=''){
    : g' z4 N6 k5 ?  s( \- C$ ]1 s( n9 D; G; ~
  3.   require_once 'phpqrcode.php';
    2 R  G# U# n. N# V* Y
  4.   $value = $url;         //二维码内容
    0 `# ]/ T5 ?- S. z3 [2 ~! d
  5.   $errorCorrectionLevel = 'L';  //容错级别
    8 F2 r- m. L5 k/ ]# e( g+ {% L
  6.   $matrixPointSize = 5;      //生成图片大小/ w  N7 N6 [3 K6 [; K- u. O
  7.   //生成二维码图片
    1 W4 |! d. ?0 W$ A' j
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);2 l0 g. T5 h: Z) u. U2 d
  9. }3 B5 f. \: C% f# j4 R- }* U
  10. //调用查看结果8 D+ z$ l, Y4 w3 I* J# H
  11. scerweima2('https://www.baidu.com');
    - P  \" N5 C# X, t1 v$ A6 w
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。8 R- V* R7 h2 I2 a/ \3 ]
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:5 u' g9 w0 Z2 i, L" s
在线生成二维码工具(加强版)
+ Y- y2 F# P# {
http://tools.jb51.net/transcoding/jb51qrcode
5 z+ a5 L8 G4 ]2 K在线二维码解码识别工具1 M0 l) C3 q8 k7 t" B
http://tools.jb51.net/transcoding/trans_qrcode5 r! v( G7 s  M1 b" K

0 P8 z4 F* U5 Q6 i0 R) H% m- d, ^) _. }5 Z
3 s) c5 p% Q( {1 m' P

! I; c3 b4 Y1 [: X7 G" B/ W! }& C( Y- i$ F4 Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:06 , Processed in 0.062771 second(s), 19 queries .

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