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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

PHP基于phpqrcode类生成二维码的方法详解

发布者: admin | 发布时间: 2020-7-20 21:02| 查看数: 14638| 评论数: 0|帖子模式

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:. n+ n( f8 n7 N$ t' H8 Z0 l
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
1 k$ A6 x5 H% J# [( M, N) Y- t' h前期准备:
* c* K- N! J3 V$ w1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
* i* F3 W; s2 G% y# b$ a  `3 U 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)" ?! i8 W' ?3 M9 x
方法解读:
9 C; v# \2 I9 ^4 u( x$ ^& _8 Q下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
# @. B  v, S& u6 q0 S% s2 e
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    " G1 A! e) @: _
  2. {2 l, g, e9 ^  _8 j- Q
  3.   $enc = QRencode::factory($level, $size, $margin);
    + k( [% r8 f- L+ R" V, B* h5 q
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);* L* A% P; E' n9 a/ D: o
  5. }
    4 c4 S  |" f, }2 f7 b$ k, t
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;8 I7 }+ ~7 G: c% }: v. m# I
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;$ ?0 d9 @/ T  h" [" p
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;5 N* |9 k/ b: F& a- y( F$ e% }
第4个参数$size:控制生成图片的大小,默认为4;
$ |" j  {0 u6 U) C! X 第5个参数$margin:控制生成二维码的空白区域大小;- V2 c5 J% {9 u/ ~; R, k
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
8 _8 ]" I$ h& Y, N8 c( l使用示例:5 u% g7 V2 O, B2 h+ ~& U
1. 生成二维码(生成图片文件)9 r" H6 |) @2 A7 Y6 k' h
  1. // 1. 生成原始的二维码(生成图片文件)
    : ?! T6 a8 ^! ~* \2 k( p5 k
  2. function scerweima($url=''){) I, R  J8 i9 W% K' `) l* H( P1 f/ e
  3.   require_once 'phpqrcode.php';
    - V, J9 h& w) R" n7 W# n% {4 M
  4.   $value = $url;         //二维码内容
    1 r9 G0 W$ H5 g# l
  5.   $errorCorrectionLevel = 'L';  //容错级别
    3 q# p' m" `5 F2 _; p
  6.   $matrixPointSize = 5;      //生成图片大小' K$ M: x0 W. ?; n( M
  7.   //生成二维码图片1 T: h% {8 y* ^* b* D4 M1 z! d
  8.   $filename = 'qrcode/'.microtime().'.png';3 Z% y+ t7 G6 v) v& t4 r
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    ; ^$ ^# ^7 v% u0 _; W6 i
  10.   $QR = $filename;        //已经生成的原始二维码图片文件2 V* `) ~% n3 t9 T# Q8 Y
  11.   $QR = imagecreatefromstring(file_get_contents($QR));* c& v7 S1 W+ r3 z" G/ E' d
  12.   //输出图片; q! S' C$ J3 z8 _. v- o. s. P! g
  13.   imagepng($QR, 'qrcode.png');) Y2 b' a7 r# ]
  14.   imagedestroy($QR);
    9 J; O7 X2 q- o" V& z/ L! B3 h
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    , G1 V) q0 P* h) {; p  ~
  16. }
    + W2 s) s1 c3 G0 }* N; j. ~
  17. //调用查看结果
    , C0 T% K8 ?7 R& M4 l! I
  18. echo scerweima('https://www.baidu.com');4 J2 S7 Z% W# v6 V8 F
复制代码
2. 在生成的二维码中加上logo(生成图片文件)" ~" D! C( u8 Z- L) y, N- i
  1. //2. 在生成的二维码中加上logo(生成图片文件)9 d3 B9 h/ p. v1 D: R
  2. function scerweima1($url=''){
    , P' U: o* }! G$ N4 I
  3.   require_once 'phpqrcode.php';
    , L- o0 ^" x0 U& U, W$ v
  4.   $value = $url;         //二维码内容! Y# R5 j- z/ H2 ]6 R4 Q: _8 x
  5.   $errorCorrectionLevel = 'H';  //容错级别
    ) W& {# M0 ]6 }- e3 v$ k# @* z* H
  6.   $matrixPointSize = 6;      //生成图片大小5 l$ G6 S8 |+ Q5 O) X$ C
  7.   //生成二维码图片
    2 b* _1 k. B: _. s: o- K
  8.   $filename = 'qrcode/'.microtime().'.png';
    - V1 N+ X6 p4 t3 ~# \* _
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    & F/ j, _" j) y, d9 C
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    , \! C: r! X( L6 v# e+ o. \
  11.   $QR = $filename;      //已经生成的原始二维码图
    ) P4 q' O7 R2 T1 Y
  12.   if (file_exists($logo)) {8 _) q: H. Y. q* r( A9 ~
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。( O+ _. I" A# j$ `7 z% N: [
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    2 g% i9 ]- ?7 A( [. y5 ~
  15.     $QR_width = imagesx($QR);      //二维码图片宽度% ]4 l. C9 v" t* S( {6 Z+ O
  16.     $QR_height = imagesy($QR);     //二维码图片高度4 N% e$ i2 L* B5 b4 O
  17.     $logo_width = imagesx($logo);    //logo图片宽度# B2 H: z+ k/ F' W$ J7 f7 [
  18.     $logo_height = imagesy($logo);   //logo图片高度
    * N3 S0 k. A- l6 T7 Y- B1 [
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5); ?+ V' ^' K3 h" E2 ?
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)3 ?; r2 I$ m$ o$ }' x+ e
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度; g/ x$ M6 U0 b- R. T  j
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    ) G5 ]& q7 ^9 [
  23.     //重新组合图片并调整大小) d: k! a. ?1 I' R1 u! \, U
  24.     /*5 K& T5 J4 U& ]1 R* V
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中9 W" U6 p) E1 R3 g# `
  26.      */
    $ e1 ^6 S  |+ B: q# \2 ]4 ?
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
      z3 z' W7 A7 }4 s! h+ ?; Q( s
  28.   }' j2 F2 c9 b# s: l6 O2 @8 C( [5 ~, }
  29.   //输出图片& p- ~- y( p' I
  30.   imagepng($QR, 'qrcode.png');/ `+ M3 S6 F7 |8 V. O: s1 d
  31.   imagedestroy($QR);
    ! P* F2 h8 Z# K
  32.   imagedestroy($logo);! R" p* c: ^3 n) x
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';3 K$ y  I5 t  p9 o0 _
  34. }
    ( M. {, [. _9 S; K5 O
  35. //调用查看结果
    + @$ x! b  k9 i/ X5 e  j5 _
  36. echo scerweima1('https://www.baidu.com');
    $ ~4 O1 }. C2 |; T1 g8 C0 b6 m) {
复制代码
3. 生成二维码(不生成图片文件)
* T* E: T' H* Q% F3 U
  1. //3. 生成原始的二维码(不生成图片文件)6 p2 |7 t" M- q/ Q) i
  2. function scerweima2($url=''){
    ; k! z# u- \! z1 k, i% `
  3.   require_once 'phpqrcode.php';/ b9 r6 A* W/ P4 w' q7 o$ @9 c
  4.   $value = $url;         //二维码内容
    , x2 p( K  T0 X6 p3 ~
  5.   $errorCorrectionLevel = 'L';  //容错级别! X6 T9 W- |1 i6 v  i" G7 {
  6.   $matrixPointSize = 5;      //生成图片大小9 s- J) T: [- I5 ~# d9 ^; N
  7.   //生成二维码图片6 H( V% B8 t& m: `% q" x
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);4 T, s. `2 w- p2 ?, O2 `5 [
  9. }9 D$ u  [8 q5 M: b4 g" U
  10. //调用查看结果! H* ?1 G! ~2 ?. m: r- v! k. e# W
  11. scerweima2('https://www.baidu.com');
    , v) T5 Z2 Z9 P6 E- w
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。0 S' _! }; [( ]8 P' l2 H9 @
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
' v/ J5 o- c2 x9 i- m! V在线生成二维码工具(加强版)! N$ s6 c- N2 C+ W) H+ W
http://tools.jb51.net/transcoding/jb51qrcode
) l( T3 o2 A' i4 v$ I. w在线二维码解码识别工具
9 j6 I+ t+ _- {6 o# k
http://tools.jb51.net/transcoding/trans_qrcode3 o$ o, a$ D" N! L3 g
3 \& h$ f1 y" v1 s7 K6 ~2 P7 S6 A
& D! F: j7 o# t$ `; q/ I
! N5 t: E! g( h; v7 q! M- l
  r! I  W, J3 {( T
% Q" T% |, v; m% B: L  M& Q+ x8 y

最新评论

GMT+8, 2026-3-17 14:01 , Processed in 0.051654 second(s), 21 queries .

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