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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:3 |4 u. P5 j$ ?- p" g4 q
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
/ `. D" o$ }# \. ?' S前期准备:
. _$ p0 U8 X+ L. j! M1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
. B, m5 N& ?4 D+ ~ 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)( T  t" h8 d; H4 v+ i& J$ e
方法解读:
' e! I" A+ M! x+ q- ?1 u下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
- X6 E- f  _1 s2 r
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)5 S) t* |6 _+ h7 X6 A
  2. {
    & V& C! w5 r3 c$ W0 m7 h. j3 m" k
  3.   $enc = QRencode::factory($level, $size, $margin);
    6 I9 o6 A; d  [) R6 s
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);( k$ D) M+ _8 X- i' i  e5 A' ~
  5. }/ _' I6 ?. \+ S
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
1 X6 ]5 u  J  w' H6 i0 o 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
: L  F5 |. D2 E' y- e3 x, H9 ~ 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
7 Y' j1 G2 T/ u& m 第4个参数$size:控制生成图片的大小,默认为4;1 T+ R: {& P- G. |! i0 z
第5个参数$margin:控制生成二维码的空白区域大小;( F1 G' R7 m- u( g. j; j
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;) ~2 e: |0 Y4 ^+ U: ^0 N: O
使用示例:+ Y% f* i; o9 }8 o
1. 生成二维码(生成图片文件)$ w/ E4 Q4 G2 L0 ^6 B1 Z
  1. // 1. 生成原始的二维码(生成图片文件): W$ Z2 m. w+ z" Y3 t! G
  2. function scerweima($url=''){
    6 [3 T: {  f4 N' W; k  r! E: n% k
  3.   require_once 'phpqrcode.php';
    ; J7 E/ y: P. ~" m6 _/ F
  4.   $value = $url;         //二维码内容6 c. N/ w7 o: ?! C
  5.   $errorCorrectionLevel = 'L';  //容错级别
    ! D% q( Z3 S  l5 C- E8 X* |9 |
  6.   $matrixPointSize = 5;      //生成图片大小
    , I, a! m$ U% i$ `% E) T7 j
  7.   //生成二维码图片
    0 l9 a! _( C- G* W
  8.   $filename = 'qrcode/'.microtime().'.png';
    & B! E2 a' s( N# ?1 U4 x
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);& G9 D. T7 X# f; F# A) M
  10.   $QR = $filename;        //已经生成的原始二维码图片文件! c8 G. |4 L3 r" X' b0 K( c
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    - s  ~& Q6 [% d/ [) D! N2 ?
  12.   //输出图片
    + x4 C, F, x$ `2 P; O
  13.   imagepng($QR, 'qrcode.png');
    & z" d: X; h* ~4 A) C- E
  14.   imagedestroy($QR);
    ; D* c. C9 L  t5 C  J+ L% P- d
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';% `7 G, U* U0 F' i# Q. k" l
  16. }
    2 \# a( b- v3 p8 N0 W" {% y
  17. //调用查看结果) G8 D, d+ H$ G& Y& a% v. S" _+ D' O2 S
  18. echo scerweima('https://www.baidu.com');0 ]5 z% }) Z1 [5 \+ v- L8 y( I
复制代码
2. 在生成的二维码中加上logo(生成图片文件)9 k0 n# b+ B% Y" y. g! a. i3 l) J
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    4 ~* @- j% @; R5 q; F$ i9 c/ Q
  2. function scerweima1($url=''){2 C% X+ p3 P- L. H5 I% D
  3.   require_once 'phpqrcode.php';
    # {/ K# `: J& {9 w% d
  4.   $value = $url;         //二维码内容
    ! ?9 K+ _& z$ }: Q' Q# ?
  5.   $errorCorrectionLevel = 'H';  //容错级别
    ) ]. g1 _4 y/ [+ i0 Y
  6.   $matrixPointSize = 6;      //生成图片大小0 B& z7 l1 M0 i2 \, S
  7.   //生成二维码图片
    1 V! I) l' b. `% z3 D* f
  8.   $filename = 'qrcode/'.microtime().'.png';% S. `5 o6 Q3 j* N
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    6 X5 T) z" K! v1 h3 ?! b5 R: V$ X
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    * b: |" u6 D; `% A
  11.   $QR = $filename;      //已经生成的原始二维码图
    / y. d* l0 z4 X( S! J9 {1 Q2 [' j
  12.   if (file_exists($logo)) {8 u4 u& R5 ?, ^& \: l; [
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    + m9 P( @% d2 s$ D8 U9 x
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。/ d( I3 y1 f/ p# U2 i: C1 j  l
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    ; r/ d' ^% T  I. R' s1 t
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    4 A% p9 {+ _0 V, S& y
  17.     $logo_width = imagesx($logo);    //logo图片宽度; s$ }2 g" I! f8 M. A
  18.     $logo_height = imagesy($logo);   //logo图片高度' R- q0 ^" d+ r; ~" y( o. ?
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)4 m) {( N! Y) ~1 l. X
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度): a4 ~0 C; s5 X' Q
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    # {& d# U9 u! x1 ^+ O; {0 h# @
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
      G; p5 g& x5 p! h
  23.     //重新组合图片并调整大小
    " R/ A+ i( y9 m0 w4 s
  24.     /*) T: d* n' Q/ A3 B7 O3 W, w4 {. [
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    / D/ `6 t& X5 H
  26.      */
    / L: ?/ L( Z8 X
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);* E1 m) E% A! b
  28.   }
    % v, F2 {7 R0 [
  29.   //输出图片$ r- a1 D: B% \) {8 g
  30.   imagepng($QR, 'qrcode.png');- \9 U& Q8 E/ w0 q$ m+ _
  31.   imagedestroy($QR);
    6 g/ @  G  [) Y' k, N5 I
  32.   imagedestroy($logo);3 Z7 B; B8 r6 w- `" T: e
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';+ K7 w0 w0 e5 m) o$ K: d4 H
  34. }2 p7 w7 e) B5 n! f0 i
  35. //调用查看结果/ t7 \- e" f' s+ ?% X* a
  36. echo scerweima1('https://www.baidu.com');
    1 w* Y# b. t0 k# Q  g
复制代码
3. 生成二维码(不生成图片文件)& O8 c: B2 C; m8 T
  1. //3. 生成原始的二维码(不生成图片文件)
    3 c2 z6 n  }; T" F
  2. function scerweima2($url=''){- x' N. h; H# m( }! b: i
  3.   require_once 'phpqrcode.php';- ]8 u. I: Z- t/ s
  4.   $value = $url;         //二维码内容/ u' ?0 {3 C2 W+ @( @' T# k2 v
  5.   $errorCorrectionLevel = 'L';  //容错级别, X1 A% _! ^+ s6 K( r9 |( H0 f
  6.   $matrixPointSize = 5;      //生成图片大小* I. `, k- h4 V5 k2 ]
  7.   //生成二维码图片$ J9 t) J/ l" E
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);) _" h, }+ m# P# _0 d" j8 d0 d
  9. }- l* E  G/ k; ?% A) P2 F
  10. //调用查看结果' w* v/ Y5 E0 d( f6 k8 A, p8 e% ~: F
  11. scerweima2('https://www.baidu.com');: \# J8 N" I' i1 f) N4 h$ ^
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
. e* m  G6 h% T# sPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
8 Z) O5 a9 _, K在线生成二维码工具(加强版)1 N9 W% h# o4 J" A7 A" ^3 t
http://tools.jb51.net/transcoding/jb51qrcode" B$ a, M3 @) F5 N$ [& n
在线二维码解码识别工具
  d) H# w2 o8 E# S
http://tools.jb51.net/transcoding/trans_qrcode
; y/ O  T0 v2 k  R& d; X) r. {9 V$ r2 u4 d9 J# j
7 E. P' ]9 ~0 @$ F

9 }6 f% f# }  g
* ]8 G2 A7 S; D4 Z4 v$ F/ `) R0 i6 Q7 Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 08:14 , Processed in 0.058144 second(s), 20 queries .

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