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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
$ }7 K; s% i/ f2 \' r  v/ j1 T使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。. Y9 ~2 o. G8 J& {* v6 o- p
前期准备:* G6 n! n) j; N9 }" `- f
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/, a8 t# x, c- H/ e# g
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)4 j& S; {1 Z% d* W8 D7 g
方法解读:
) J) \9 z& l* i- z2 J$ D" ~6 v3 x% X下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
/ D& u) B6 Z: F. v
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false); y# V* c6 v% e4 K
  2. {' s2 r% `3 r/ t0 y- ?4 n" A* w2 a' j
  3.   $enc = QRencode::factory($level, $size, $margin);
    1 {; Z' I; c' w  H2 o" k
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);: `' C  {. Z7 W- M  H- q. ]
  5. }1 R  N+ d4 y, `1 l/ I
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
( ~2 |8 y1 J/ a/ ^ 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;( `% @! U8 [0 w5 ]8 F
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;3 A- b) }9 I; n0 I
第4个参数$size:控制生成图片的大小,默认为4;
8 t# r4 Q; K1 _  T3 \ 第5个参数$margin:控制生成二维码的空白区域大小;  z( S9 \. _' C$ }. |
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
9 P) I& l/ g( |- a7 b: S使用示例:* ~1 M3 z  G  I7 W  [& H0 y
1. 生成二维码(生成图片文件)2 A0 _5 _/ a' p2 m0 V. w/ g* s6 {
  1. // 1. 生成原始的二维码(生成图片文件)/ z) b$ a3 g  j: l
  2. function scerweima($url=''){
    : }/ u8 E8 x- c
  3.   require_once 'phpqrcode.php';  X4 b* j  p9 H% R5 r
  4.   $value = $url;         //二维码内容, X  \5 L: S* P( u% p4 x6 L) U
  5.   $errorCorrectionLevel = 'L';  //容错级别
    ) q! F' {* v9 B; {# J& h4 l3 k- t
  6.   $matrixPointSize = 5;      //生成图片大小
    , O4 Z8 }5 H8 E* W
  7.   //生成二维码图片# t6 A' @0 B: v+ g2 x3 O% }
  8.   $filename = 'qrcode/'.microtime().'.png';# g, T2 T( u4 k& l+ q7 R/ B
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    ) g+ N8 G2 P5 k5 a" C5 F7 p
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    % k6 ?. R' D" q! c6 r
  11.   $QR = imagecreatefromstring(file_get_contents($QR));  a; z: B# y7 f$ F
  12.   //输出图片7 R, {% S4 j( e/ Q7 K" t
  13.   imagepng($QR, 'qrcode.png');
    2 r% j. \1 {; k
  14.   imagedestroy($QR);. h: w3 u0 x) V, R
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    3 q7 e/ g& C9 c6 a+ i/ o
  16. }
    6 p- H2 E+ q3 _" p8 p
  17. //调用查看结果
    * ^/ w( P& m# w) X# ~4 ], m
  18. echo scerweima('https://www.baidu.com');5 G3 f7 i* L  e
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
  k2 s+ `8 X0 y5 \% \# q
  1. //2. 在生成的二维码中加上logo(生成图片文件)5 D6 |' k* L# N& u
  2. function scerweima1($url=''){
    2 X1 e: z. H/ s+ l* X
  3.   require_once 'phpqrcode.php';7 V# X: K. a1 ~; y% O. [# s) w
  4.   $value = $url;         //二维码内容. h, i) M! G/ E. }& Y
  5.   $errorCorrectionLevel = 'H';  //容错级别- [2 K. w4 b1 x1 A% ^8 O
  6.   $matrixPointSize = 6;      //生成图片大小) S  z  A9 w0 ^. x8 ?
  7.   //生成二维码图片: g: d0 _& Q9 p3 G* q8 \
  8.   $filename = 'qrcode/'.microtime().'.png';
    2 [# N2 P1 q- @! N& l
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    : r! W. Y) Y$ r: J9 d# P
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片, c1 r% w* S- ?. a; }
  11.   $QR = $filename;      //已经生成的原始二维码图6 I1 L  g& E5 c3 M# u  H1 v, a+ e
  12.   if (file_exists($logo)) {
    / V$ T9 }8 y( M0 T" t6 J' c9 _4 J9 I
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    5 Q7 U" j9 C, [0 J/ i) C0 i7 ]3 A
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。1 e2 Q, s1 X9 k! F. h) z5 b3 ^- E" K
  15.     $QR_width = imagesx($QR);      //二维码图片宽度" ^% E% Q& d: u; H, e
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    # Z' c7 ^8 B4 K/ w6 \3 ?
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    ( Q: ~& A6 O' k" s6 x
  18.     $logo_height = imagesy($logo);   //logo图片高度
    - Z4 p3 z# c" q/ l2 Q0 @
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    3 e7 ~; ~: |+ i- U5 h
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)& |4 {& y* z  H
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度: F2 u7 y8 b1 `( X
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
      U$ S, u+ n+ v7 N5 t/ c
  23.     //重新组合图片并调整大小
    % v* R7 w/ f7 B- f% O' m" c5 |. D
  24.     /*
    & q4 Q0 _% T2 D8 E" v3 H$ P  V- |
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中3 r# y8 V/ t/ ^& S; t0 a
  26.      */, B* z, Y) a1 U+ r
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
      [$ i1 w! [3 V/ m  a7 q
  28.   }
    ! j% n% S* @) T7 P) n
  29.   //输出图片
    8 Q8 H& G9 }! m. J+ W: c$ U( D
  30.   imagepng($QR, 'qrcode.png');3 L. n& L8 W* C8 }' N! a. x
  31.   imagedestroy($QR);
    , c6 G5 E4 Y5 g
  32.   imagedestroy($logo);' \( I+ g5 D; h* P9 S, ~
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';/ d' O! C" c5 ^& R
  34. }& o/ e2 e8 F) ^+ @. l6 `
  35. //调用查看结果
    , d# P( C5 c( B1 [6 W+ {1 Y
  36. echo scerweima1('https://www.baidu.com');& }# V, {/ R1 c- p, f' W) X5 d
复制代码
3. 生成二维码(不生成图片文件)
( @' }% ^: p3 A9 w% ^
  1. //3. 生成原始的二维码(不生成图片文件)
    * j8 o0 {0 e0 l- q2 L/ N7 l" D5 L" U  [
  2. function scerweima2($url=''){6 p/ i# Y5 v! _, R; d+ ^1 {
  3.   require_once 'phpqrcode.php';
    " V' N. w* g/ l+ l% B- O3 j! A
  4.   $value = $url;         //二维码内容, v  d4 C/ @% I, K  K# a; ?' x
  5.   $errorCorrectionLevel = 'L';  //容错级别3 D% ^- q' k' \( ^8 g6 r: ]( g/ P
  6.   $matrixPointSize = 5;      //生成图片大小* W; X" ^7 ^1 B; _  P& V' J6 E9 p
  7.   //生成二维码图片
    # y2 J, L) P' G6 t9 ^
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);* {% a$ H$ m9 B6 E- K
  9. }
    # |- `" f. ~6 Z. _; N
  10. //调用查看结果; S; H  N# d6 h' j
  11. scerweima2('https://www.baidu.com');3 E3 N1 J' @  e9 n3 i: {4 t
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
# F0 _3 i6 h: i7 l+ YPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:/ l/ ^5 C' e' H" m8 `4 ^
在线生成二维码工具(加强版)
3 s% N& r* ~# h$ [& f* a
http://tools.jb51.net/transcoding/jb51qrcode' N4 b! s$ Y1 U  s1 T
在线二维码解码识别工具
. |3 P2 T4 q) V, H% y( g& P1 x
http://tools.jb51.net/transcoding/trans_qrcode$ L% n  {' L! A9 {) V

; B/ K' b! T5 h- p! I5 {, g5 H
  @0 |/ B2 }" f4 C7 ?
& E( E3 h0 F! `3 O
3 ?+ P) A6 P8 s* x/ u+ I; G/ Q" A" r: e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 08:10 , Processed in 0.062754 second(s), 20 queries .

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