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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9392|回复: 0

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

[复制链接]
发表于 2020-7-20 21:02:46 | 显示全部楼层 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
8 M, |( i6 V  S5 [$ ~  M使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。" p+ W( V' n% @8 U* W. n1 F; S6 ~  c
前期准备:2 e4 H  m' w; ]9 L$ ?0 b) o/ g0 ^
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
$ M( d$ E9 n$ J. N3 v. u& @ 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)' L. w9 a7 A7 a1 y/ e& Q
方法解读:2 R6 p4 J) [3 n5 z; I* I* G
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):+ j  o& m$ g$ J/ F  H# O4 }4 o( x
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)0 {/ l) l/ {6 O. V  f
  2. {& Q( R7 a: v+ k$ t6 J, w
  3.   $enc = QRencode::factory($level, $size, $margin);
    + `6 l4 z9 Q1 u) q# k
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);! P5 U, z/ `) o, S. v
  5. }3 \8 v  z5 n( P0 }
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
4 Y- V7 O* H3 u0 o! C+ J 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
* d( T" z4 ~- ?7 b 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;+ s. _' B. J: u' s, G" O( m1 y& k7 N
第4个参数$size:控制生成图片的大小,默认为4;
: J" J" g" M9 N! ?! @' L3 H 第5个参数$margin:控制生成二维码的空白区域大小;
# }2 W6 H& Q% `& z8 S) U 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
# K; j( I. S7 l$ y5 H. @+ {使用示例:1 ^( G4 `& c4 x. F1 G6 B
1. 生成二维码(生成图片文件)7 d. C0 p. ^5 c- v+ N1 {: x
  1. // 1. 生成原始的二维码(生成图片文件)
    " [# }: @5 O3 b# E/ v4 z
  2. function scerweima($url=''){4 V/ R6 X- w9 V2 M; A# G
  3.   require_once 'phpqrcode.php';- u8 F! |7 U# r; Q  s" `
  4.   $value = $url;         //二维码内容) `" G$ }# W; |0 d- a
  5.   $errorCorrectionLevel = 'L';  //容错级别
    5 O$ E& [4 S9 T7 d8 x5 t
  6.   $matrixPointSize = 5;      //生成图片大小2 \5 P8 c# X+ Z& A$ P
  7.   //生成二维码图片
    2 _. C# M0 v  _$ A0 i* }
  8.   $filename = 'qrcode/'.microtime().'.png';
      B0 F- @  Q+ d6 h! i& _
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);9 d2 r; B+ E9 m8 d+ g
  10.   $QR = $filename;        //已经生成的原始二维码图片文件; O$ s6 S$ \2 }+ L4 t9 e3 E
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    2 C1 }, X- L4 z
  12.   //输出图片
    & U3 {# d: v. J, H" t
  13.   imagepng($QR, 'qrcode.png');5 N5 C# Y  L! U: Z! L5 j) j
  14.   imagedestroy($QR);
    / E" y; [$ r% R0 m' L& N6 A5 y& n
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';9 w+ h4 i& c- k8 t- `
  16. }! T1 j/ C. M. c1 ]  Q3 c
  17. //调用查看结果! D) T& q; d. [- x9 M
  18. echo scerweima('https://www.baidu.com');
    % e# O, i9 G/ x# l1 y! M
复制代码
2. 在生成的二维码中加上logo(生成图片文件)2 D; W& X5 f6 n$ S
  1. //2. 在生成的二维码中加上logo(生成图片文件)3 l* k9 y- z0 D% \/ d) I: _
  2. function scerweima1($url=''){3 N# d3 u; z5 O
  3.   require_once 'phpqrcode.php';
    6 t8 Y7 `# R; s! o% l3 J& J
  4.   $value = $url;         //二维码内容" l- W- C. n& e2 X6 _
  5.   $errorCorrectionLevel = 'H';  //容错级别+ h( {/ C7 t/ ]- l
  6.   $matrixPointSize = 6;      //生成图片大小
    - t% w3 M2 ?; D( V
  7.   //生成二维码图片
    8 ^# D  i3 |9 W7 f, P
  8.   $filename = 'qrcode/'.microtime().'.png';. X8 A- w" ~1 b- W' L
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    ; N/ H8 J3 W% H/ |
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片# ^! |. i+ I% F1 W, K  d$ f9 Q  V
  11.   $QR = $filename;      //已经生成的原始二维码图
    6 e; C$ T: k9 R# w
  12.   if (file_exists($logo)) {' o& X# A! b9 @0 m& W& W9 y
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    ! ]4 x, y* q) X8 s$ w) ]! i
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    : k/ H! Z3 ^- E, l3 b$ l: S3 v
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    , K$ a6 x, y/ V& B6 p" A
  16.     $QR_height = imagesy($QR);     //二维码图片高度5 z9 a4 Q. L' F
  17.     $logo_width = imagesx($logo);    //logo图片宽度
      q, ^) z7 H+ i. X: j- i
  18.     $logo_height = imagesy($logo);   //logo图片高度
    , n/ L1 c$ {( F6 n& z( e, {
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    " c8 H4 Z8 s+ Y; L6 X
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度). }$ c5 Y- Z& H" [; C2 e: u5 k! P$ e
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    ; M& ~4 a* u) c  w
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点- R. S0 I% n8 q$ g' u4 e
  23.     //重新组合图片并调整大小
    6 d7 }* e, g& g' D
  24.     /*. }- z0 }, D* m
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中2 L/ Q: D/ b5 G3 U
  26.      */
    ) c. D; p" c$ p' C) P
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);5 h7 v' @6 M% D5 o2 H
  28.   }9 s0 O; r9 F  D- G* f$ i# q6 U% q
  29.   //输出图片
    4 a5 W4 b+ C; f+ f% o1 ~
  30.   imagepng($QR, 'qrcode.png');9 z& P: u; o8 O/ K- y( e7 Q
  31.   imagedestroy($QR);
    9 Q+ g9 R0 K4 H- v, k* S% G  B
  32.   imagedestroy($logo);
    1 s* ?, B3 n6 J0 |  [
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';8 o. A# ]4 x9 q' r8 E  ]
  34. }  H; |2 }* r, A+ G1 k! K0 X
  35. //调用查看结果
    - A0 l# b: X7 q7 R" i* L# k1 e% f
  36. echo scerweima1('https://www.baidu.com');
    & w' }. Y" y' K/ a* z5 q
复制代码
3. 生成二维码(不生成图片文件)7 j2 Z) Y  G! R
  1. //3. 生成原始的二维码(不生成图片文件)0 C! A$ L5 v- H( C6 ~( M. @6 O
  2. function scerweima2($url=''){7 [! T/ [: P8 o1 U$ Y* K
  3.   require_once 'phpqrcode.php';; Z1 e) {, d- @4 R! C! s
  4.   $value = $url;         //二维码内容1 C( H" K0 }: U5 t
  5.   $errorCorrectionLevel = 'L';  //容错级别
    ; ]3 l/ N5 b# q
  6.   $matrixPointSize = 5;      //生成图片大小% w# C8 Y6 n; h5 y* {+ R, c2 {
  7.   //生成二维码图片
    5 Q2 g' {. Q8 |) Z. y
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);5 E, J" O* A( `8 x
  9. }
    6 R6 ~( D9 S) I9 L. z% c# S: k" \" ^
  10. //调用查看结果( U2 x& ?; V$ e' ^; I) N$ C
  11. scerweima2('https://www.baidu.com');  ]; M9 z( h" j0 M3 [
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。0 o! m1 ?( B+ f0 c, M( e
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
$ I* E7 c3 c+ X6 a# {: w, Y在线生成二维码工具(加强版)
! [$ l7 A4 }1 j
http://tools.jb51.net/transcoding/jb51qrcode
! z. {7 @0 V* I# K在线二维码解码识别工具4 R$ a: E" N( h: H3 K6 d
http://tools.jb51.net/transcoding/trans_qrcode+ A7 Z+ |% {* F# m9 J# L

; u$ w5 _  Y. g! j
& q4 f- l- \' P; M; F( k( e2 l; }9 Q
9 S# L# U5 q2 p1 K% V* d' n, a

4 b  n" ^4 _7 y) x- h0 }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-25 12:24 , Processed in 0.140376 second(s), 22 queries .

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