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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:* H/ l4 O: N1 F  _
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。  P/ c2 k. y$ ]4 z( v+ M0 G! r
前期准备:/ V$ {3 S0 X) p  b1 E3 t1 Y
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
) I+ R( F2 X% t 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
* u$ q/ t1 |5 P方法解读:
! {$ M: K2 T. c下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
$ b5 r( F% L" H- J4 q. a5 s: p: \) O
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)  S+ s4 A4 V) B3 v- t3 w
  2. {
    3 e% w( c7 }! |& }6 H4 x8 G* w
  3.   $enc = QRencode::factory($level, $size, $margin);
    ! \, i0 ~8 _! M$ t" U
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    ( q5 l7 \6 C% ]  K; [
  5. }
    ' U! o7 {# ]" U) A5 y* i
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
. o& C, h, ]2 c 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
5 r: A, L) k  ~. N! {2 i 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
$ z) D) f2 J2 R6 q7 u 第4个参数$size:控制生成图片的大小,默认为4;
' m& M9 |' ~: g5 z1 _' t; d 第5个参数$margin:控制生成二维码的空白区域大小;8 i4 v% m: K1 T" l: N0 X
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
( b! N# ?: n  d7 F使用示例:0 I8 w, B( v6 S0 ^, B8 D3 y
1. 生成二维码(生成图片文件)
" c* O) ~/ }' p. ]9 |" O
  1. // 1. 生成原始的二维码(生成图片文件)
    & r9 A9 c7 V, a; i, j, z
  2. function scerweima($url=''){/ H+ K) {, t: ^
  3.   require_once 'phpqrcode.php';4 x4 F5 i3 T$ h4 o( h# I4 ~
  4.   $value = $url;         //二维码内容
    * p6 f, ~* H7 g* q$ m7 k
  5.   $errorCorrectionLevel = 'L';  //容错级别$ ]* @: H& o2 [- [( R& P8 y
  6.   $matrixPointSize = 5;      //生成图片大小
    : T' A2 o! h$ }* Z3 m! i
  7.   //生成二维码图片3 W- N1 H; e. w8 l% A
  8.   $filename = 'qrcode/'.microtime().'.png';" ?, s; s  W% X' ]6 Z
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    ( _9 Z: I3 k& F1 X7 u0 |6 D8 S
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    " J2 ^+ W) g$ [/ y. X
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    ' S! s/ j4 g. V% i
  12.   //输出图片# O  @1 B* ~. t/ T! Z( q, V
  13.   imagepng($QR, 'qrcode.png');3 B" f8 B6 `/ o0 o
  14.   imagedestroy($QR);
    . x1 Y, \, f$ r4 C
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    8 I( j( O1 P9 R+ f, u8 n) |/ r
  16. }9 p  k% a0 J4 R6 P0 Z0 _  f
  17. //调用查看结果
    9 s: P9 n  T& w! K
  18. echo scerweima('https://www.baidu.com');- \8 `1 X: W3 w, Q" H
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
7 ~" |* ~0 C" T
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    ' O& }9 K! P; X9 `& o; I
  2. function scerweima1($url=''){: Y; I2 F& V2 x! g% z  T, N$ t
  3.   require_once 'phpqrcode.php';
      j  r( Q  i5 i8 T& _; T# u4 c, p
  4.   $value = $url;         //二维码内容
    4 L* w- r8 u4 E
  5.   $errorCorrectionLevel = 'H';  //容错级别8 _) \$ V3 u; w
  6.   $matrixPointSize = 6;      //生成图片大小' {% A9 J) n" }2 p; n9 e, b) @
  7.   //生成二维码图片& G& S7 f$ Q& w" g
  8.   $filename = 'qrcode/'.microtime().'.png';
    ' S3 Y8 ]; t! Q/ w7 Q7 p  w- C, g
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    ) a9 ?! m# N$ y- \! ~
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    $ U7 G8 \; h. `' }
  11.   $QR = $filename;      //已经生成的原始二维码图; o, ^2 I0 O0 z3 }8 O
  12.   if (file_exists($logo)) {
    # `0 \) j5 D0 W% ~
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。8 X6 r4 E( T* C
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    - C* n2 {" R3 f0 F
  15.     $QR_width = imagesx($QR);      //二维码图片宽度. g) n: m& h0 z/ @
  16.     $QR_height = imagesy($QR);     //二维码图片高度% m0 T' r! ?( l$ }$ H+ b/ X$ q& [5 v% u
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    # Y# q5 q; F4 F
  18.     $logo_height = imagesy($logo);   //logo图片高度" l- Q6 F( }7 ~- G6 i
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    6 s) u/ \/ L" S$ M0 W. A
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
      \# I5 h; K# T# r2 c
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
      z% o% Y1 e9 |6 L
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    ! n4 U0 W3 e) B" j; G4 N
  23.     //重新组合图片并调整大小; \; F3 @9 L/ J  l2 Q0 }: a
  24.     /*
    % Y& q! g: L1 ^
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中5 s1 H; J) E5 N( F" g1 H
  26.      */3 P* q8 G! e/ i" K
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    / w; I" U! @" g8 {& `' D2 U
  28.   }* v2 B) [# x' S
  29.   //输出图片
      Y- }0 k/ r  h& z
  30.   imagepng($QR, 'qrcode.png');( |: H, A' w& C8 I
  31.   imagedestroy($QR);
    7 h# F; f# D0 g9 S8 D" _9 I
  32.   imagedestroy($logo);
    3 D/ ]- K0 f# z+ h1 B. ?+ r
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    9 n" i. K0 F$ Z% J0 v
  34. }9 L# ~$ C9 Z' |5 b, ~0 B% P
  35. //调用查看结果2 K: @8 p. ^* I" c' r, S% ^
  36. echo scerweima1('https://www.baidu.com');
    - M) d1 Z" f# Y& H
复制代码
3. 生成二维码(不生成图片文件)
) ~7 ?2 r  z% `' V5 |% g4 [/ B$ n
  1. //3. 生成原始的二维码(不生成图片文件)
    1 T$ u2 j  r' H
  2. function scerweima2($url=''){. p) D: y$ r; i: |
  3.   require_once 'phpqrcode.php';
    2 D8 a6 Q+ T6 s# O: w0 M
  4.   $value = $url;         //二维码内容
    ; Q% |( h5 v" v: V# J1 [# A" x
  5.   $errorCorrectionLevel = 'L';  //容错级别
    ' C1 P6 C: d% k4 l% D5 E) K- E
  6.   $matrixPointSize = 5;      //生成图片大小% ]7 O4 i8 K# C3 ?3 x' @
  7.   //生成二维码图片) u0 F9 P8 A- B
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);+ j9 k3 |$ K, c$ h/ o0 @
  9. }
    7 x* |0 k9 E- o3 R. h5 N+ m& K
  10. //调用查看结果( j( G( `; Z9 R1 |/ B
  11. scerweima2('https://www.baidu.com');1 Z+ w- @# A9 M
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。1 ?: s# e. I  v$ X! |' R
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:: R1 O# {; g2 i
在线生成二维码工具(加强版)
+ T& n, l, t% E0 x6 @6 L0 G
http://tools.jb51.net/transcoding/jb51qrcode
1 n! c, c2 N" a在线二维码解码识别工具+ b+ ^% L3 u8 M4 ]% B
http://tools.jb51.net/transcoding/trans_qrcode: E: g  W# |* {$ x% E3 o

% Y1 [: W$ h( W& r$ U
! o" l: a0 c; H3 g1 F6 h, [0 v+ n7 z+ T0 `( W6 k; O" k3 l3 i

* t  `) u7 `( I. y8 F# X: @1 U3 L. x" L: P0 J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 16:44 , Processed in 0.066528 second(s), 19 queries .

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