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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
6 v: j9 ?1 Y4 ~' P, d  k使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。$ W% y5 G7 f& {2 O# \* m2 o
前期准备:) [+ w6 x1 O) `7 R
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/7 B& O+ U2 `# {1 S5 J/ u
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
% H( k! w' F! _& w方法解读:/ `8 K5 \( q6 ]
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
0 [3 y  H" @. g
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)1 A+ M' H& Z! O. l3 L+ q/ Z
  2. {8 K  g$ T' C4 k5 a7 J  U
  3.   $enc = QRencode::factory($level, $size, $margin);5 P! j0 B! J# V  n8 O
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    5 J9 J7 y9 ?. c; J
  5. }
    ) e$ s% ?9 b8 R1 u' A5 r/ E
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;1 c, C0 c* d& R' n! n! m& \8 A$ c
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
0 o% D6 C, J! w$ Z1 }1 S6 K 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;2 Y5 k& j- J2 C* e& Q& X: k* R3 v
第4个参数$size:控制生成图片的大小,默认为4;6 y. P, Y& i8 z: \$ @5 r; B/ ]! k9 f
第5个参数$margin:控制生成二维码的空白区域大小;' ^$ r4 k7 \3 v& k; D0 }
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
1 X4 ]! y4 R* B( f+ ~# K  n- @使用示例:3 C, c0 B7 j  R# r! K
1. 生成二维码(生成图片文件)
! {7 f" \( m4 E& {5 U% C
  1. // 1. 生成原始的二维码(生成图片文件)
    / i* P- y* b" r: Y
  2. function scerweima($url=''){
      _6 F1 C. O# [) h) x
  3.   require_once 'phpqrcode.php';) W3 F' J6 U$ }
  4.   $value = $url;         //二维码内容) ?% j, e) m+ O
  5.   $errorCorrectionLevel = 'L';  //容错级别1 }6 N7 \# F1 F
  6.   $matrixPointSize = 5;      //生成图片大小6 v# F% ]3 b" p. {* B6 j0 e
  7.   //生成二维码图片
    . U' q4 Y" i& w6 r
  8.   $filename = 'qrcode/'.microtime().'.png';
    3 A2 y) t2 R* R0 B* s
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);, i" v1 V  f) o$ P8 N
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    ' I; v- J( n/ X% m
  11.   $QR = imagecreatefromstring(file_get_contents($QR));1 |) p! X6 ]1 f# [1 y+ {, M
  12.   //输出图片
    3 o  m: a$ E3 q$ E
  13.   imagepng($QR, 'qrcode.png');
    ( m  _2 _8 b  U3 U9 m. R
  14.   imagedestroy($QR);6 o  f+ w2 a( T% _7 u
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';2 t7 \" M4 ]8 A: B# ~7 V
  16. }7 I' w9 W) b$ Z( J# ?3 n1 E
  17. //调用查看结果+ @' V& B9 s( d. Q9 m
  18. echo scerweima('https://www.baidu.com');2 S/ k! E1 F/ o6 ?5 l+ X3 g$ l
复制代码
2. 在生成的二维码中加上logo(生成图片文件)0 f+ @* l. ], r' }( N
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    0 C! ^% ]7 K1 C1 H
  2. function scerweima1($url=''){
    0 U5 e# M. H* g8 \, u+ X
  3.   require_once 'phpqrcode.php';1 U) y" T# b5 H
  4.   $value = $url;         //二维码内容
    9 u! \/ ?/ C# B0 q
  5.   $errorCorrectionLevel = 'H';  //容错级别
    8 v3 `, S, @8 G9 y  X
  6.   $matrixPointSize = 6;      //生成图片大小
      H. r% H: x5 E/ E7 t
  7.   //生成二维码图片
    ) M* Y8 _* j+ t% M& P$ E2 s* a0 R2 F
  8.   $filename = 'qrcode/'.microtime().'.png';" J! A' O8 r9 f4 `3 i9 p5 q
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);5 `) Y6 F+ v5 J* V
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    / h: B3 }2 C0 U, G
  11.   $QR = $filename;      //已经生成的原始二维码图2 X$ h9 O& d' @. s( n. U/ l3 @
  12.   if (file_exists($logo)) {
    ' m8 A3 h3 _$ q7 A3 R$ R/ r, f
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    ; f4 R8 O+ Y1 N# h" o; W( C/ N
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。) s# P" ?) l# A
  15.     $QR_width = imagesx($QR);      //二维码图片宽度* n: t' a8 X. t8 c9 S9 r2 B
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    2 U: K. P* D' a" E1 k( T2 \8 h
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    / j! E9 i" E. l! Q7 l( X( W9 p$ J/ T
  18.     $logo_height = imagesy($logo);   //logo图片高度
    3 @! U- W3 D$ r& [; N
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)! a9 ~1 U3 a. F! x, U
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)' p) n, M, M: c0 ]$ }  c3 H
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度/ X/ t2 v  a4 f! b/ l
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点' I  h0 G- l; J7 l; e
  23.     //重新组合图片并调整大小3 \" A: @% E; P8 X& g
  24.     /*% |+ b- N2 w# k8 _
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    ( [- D$ [  O. s
  26.      */1 ~% T% E- I- x+ Y9 j. f
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);1 k7 m# g# m' v9 r; j( z9 m! a6 i6 n* t
  28.   }
    - Y3 }; ]2 H) q6 Q- n, R& Q
  29.   //输出图片( R- o1 S" o& ]+ ~, f; n, \4 Z
  30.   imagepng($QR, 'qrcode.png');2 c+ G6 p* a" b' g7 w
  31.   imagedestroy($QR);
    ! B9 U8 d( D( o# ?# g( E: I% r
  32.   imagedestroy($logo);
    2 D! J$ [' w. r$ u* o
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    % j2 [+ p8 q, b  {" n
  34. }
    3 _: l) G+ R/ r. s3 G
  35. //调用查看结果. o, B( M' z$ U9 ^
  36. echo scerweima1('https://www.baidu.com');: R; |6 B0 A. W8 E
复制代码
3. 生成二维码(不生成图片文件)( \( N* ?, e9 z: v
  1. //3. 生成原始的二维码(不生成图片文件)/ q3 D  {* n* x* _$ g
  2. function scerweima2($url=''){
    ( d" ^5 N; d1 ]7 b( m0 {( N
  3.   require_once 'phpqrcode.php';! P' O+ H/ d+ P
  4.   $value = $url;         //二维码内容
    6 ^/ v0 w; j- @& O
  5.   $errorCorrectionLevel = 'L';  //容错级别
    2 p* p% I% T. W6 C8 g- H
  6.   $matrixPointSize = 5;      //生成图片大小
    9 ]' Z; ^% e$ D/ y
  7.   //生成二维码图片
    - a9 o& F" G( e" C4 c. A7 d
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    9 ^. x2 ?  c6 C" s
  9. }
    # _7 R) I/ q' Y, a+ y
  10. //调用查看结果
    ( v& _  a8 V7 X4 R! u" y/ e' T
  11. scerweima2('https://www.baidu.com');
    + Z5 F+ x! @1 n- d0 U4 e- ?' Q
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
" k  F9 ~9 w9 `3 c. bPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:/ y0 ?6 G# Z2 S& b1 Q
在线生成二维码工具(加强版). e$ g+ A! D- z% P7 d% w
http://tools.jb51.net/transcoding/jb51qrcode3 Y* j: i0 _! n. o
在线二维码解码识别工具% t# g  U( K) p8 d) q. i
http://tools.jb51.net/transcoding/trans_qrcode
2 O$ b. ]# G: z. o
3 Y8 M. q  S2 [" C( ^: a3 d' H) A- v( X- e5 ]5 g3 c

8 x' v5 C: q0 A9 G$ M; d/ x( H, I* }- ]" j9 l% B0 O  W7 B

. Z8 [  ?' V: Z! l( H1 [+ v6 o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 11:23 , Processed in 0.054222 second(s), 20 queries .

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