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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

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

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

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:; ]$ ]% p' N9 W% s. ]/ \
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
+ [( S$ e% `& R6 c& P/ ^/ P+ L0 j) g前期准备:( T" |/ m8 c2 q! `: c& d
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/' t$ H$ L+ r6 \4 N/ [( K
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
9 w; y% ~8 p: g1 U方法解读:
) Y7 h" Q+ h. n; j4 P) L下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
7 B2 A8 n( P  w$ f# y0 }
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    & o2 o' H) J5 s& K1 C2 j9 u
  2. {
    + i' X- D2 J3 w; ]; t
  3.   $enc = QRencode::factory($level, $size, $margin);
    * _) A0 X  W+ a; m3 u
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    $ i0 I0 G) \6 g# e6 i* f
  5. }$ a( w8 o$ p7 }
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;( f3 g' x# f  l
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
3 T+ F1 k9 z: t+ Q 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
0 H7 ]1 s% R" D# P; y; Y2 D 第4个参数$size:控制生成图片的大小,默认为4;4 w) ^$ X5 Q, }6 j, R: c
第5个参数$margin:控制生成二维码的空白区域大小;
% e1 X9 U  |! m$ n5 T5 F2 ^! P9 z 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
3 g& {/ s* u2 u3 I( o0 P使用示例:
+ ]/ _9 L9 [0 S: h* c2 c: _1. 生成二维码(生成图片文件)2 O& b3 ]* h3 n' `+ d6 x* ?
  1. // 1. 生成原始的二维码(生成图片文件)
    * `# m7 X$ ~0 A* B& F
  2. function scerweima($url=''){
    9 U5 s: n, ?% s" r2 u$ P- h
  3.   require_once 'phpqrcode.php';% i9 h- p! C8 d: b2 i
  4.   $value = $url;         //二维码内容
    ) w. w+ S0 T7 h0 y) K4 |7 j
  5.   $errorCorrectionLevel = 'L';  //容错级别3 Z8 \; W' J& |
  6.   $matrixPointSize = 5;      //生成图片大小
    $ v+ O6 w# T! L) Y, ?
  7.   //生成二维码图片
    % a9 `) A  T7 F- R/ y  ~0 q1 Y9 t8 l: V
  8.   $filename = 'qrcode/'.microtime().'.png';/ g' [8 t  Q) ^- k+ N
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    7 A1 ]$ Y: g& p3 n3 i! G7 y! G" m9 l
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    $ x8 K$ H+ F' N% R: U7 o
  11.   $QR = imagecreatefromstring(file_get_contents($QR));$ [/ ^- E) L& \% z% Y
  12.   //输出图片0 Z( E2 G7 T& l5 ?: d9 p
  13.   imagepng($QR, 'qrcode.png');: b7 u5 W* o- p' ]8 i. u  a
  14.   imagedestroy($QR);
    ! d% x2 _, P4 g
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';1 b6 v; Z- b, D2 [
  16. }
    7 K1 F+ J/ H7 i2 z
  17. //调用查看结果% ?9 i2 u1 H3 p" m  l
  18. echo scerweima('https://www.baidu.com');
    ! T1 p$ g) Z# d# x1 u; U9 j
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
% g$ x: B2 ~6 L$ D" M  m8 k
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    . K  k* N. Q. T; ?: \2 a3 j- ~
  2. function scerweima1($url=''){6 A4 U! t0 U( ~7 q4 N- u8 c
  3.   require_once 'phpqrcode.php';' n6 T0 l5 G% O0 z! [2 b3 e$ T
  4.   $value = $url;         //二维码内容) T: V8 P9 y5 u0 A% @+ ?
  5.   $errorCorrectionLevel = 'H';  //容错级别) ?8 x' k4 W6 h/ k1 Q
  6.   $matrixPointSize = 6;      //生成图片大小/ a: i2 f' ]5 N' D
  7.   //生成二维码图片; o0 s( K  R5 J% M
  8.   $filename = 'qrcode/'.microtime().'.png';4 J3 Z- Z# T9 ~! s
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    3 q1 t/ L  H2 |
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片' a0 e6 u: l9 w9 J( H3 ]& R
  11.   $QR = $filename;      //已经生成的原始二维码图
    6 c3 t7 n& d) E* U
  12.   if (file_exists($logo)) {  x! v8 |5 e, K
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。) a0 e" H; t5 P' J
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。7 R3 y" H1 D) b' A
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    8 e7 B7 Z4 \! U9 c
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    $ L  K, r& X) h9 N& a9 k
  17.     $logo_width = imagesx($logo);    //logo图片宽度* g7 K$ L* m- g5 C" E1 ?
  18.     $logo_height = imagesy($logo);   //logo图片高度1 Y' |: n: D; N8 d2 u% |. M- X" a
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)+ g9 _, N% T9 ~7 f' O5 u2 k/ ?6 F. d
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    ' @$ q8 |, D7 P; o- |
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    % H. s5 N2 \  u) [$ s- e$ e# s$ k
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点3 o" G7 n- g4 J7 e( X$ A
  23.     //重新组合图片并调整大小- Z: M! I" S4 U7 g0 `! i
  24.     /*! T- j8 f* `% v; X
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中$ {, C9 J, u& F& w5 s
  26.      */
    1 ^& O' F$ I# o( s1 g5 X8 F
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);  @7 V# V) O/ u- u2 e! e) v8 ]1 S) k! S
  28.   }+ S8 v# @' S! A: C0 g3 n
  29.   //输出图片9 i2 t- c, P4 X1 ]) M
  30.   imagepng($QR, 'qrcode.png');, C8 R! `  U- Y( T7 S1 G2 q+ [
  31.   imagedestroy($QR);* _) e4 A% b# x& v% K/ D
  32.   imagedestroy($logo);6 P/ E. A1 C( n" e
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';( a( L* g3 }. t" o! r2 |
  34. }
    2 u5 _5 B# {* @$ \1 a9 O% s7 \
  35. //调用查看结果
    $ ~# S! K1 J; E* ~* _, z
  36. echo scerweima1('https://www.baidu.com');
    2 o! Z5 W9 J0 ^- y$ t9 e2 h6 r
复制代码
3. 生成二维码(不生成图片文件)( J/ }! C( n9 |: D
  1. //3. 生成原始的二维码(不生成图片文件)
    9 v9 y+ p, h: w1 h. q  q2 Z- U
  2. function scerweima2($url=''){8 ^/ }) F3 R, d; c) |/ j
  3.   require_once 'phpqrcode.php';$ z5 b! a- \- i3 w5 w
  4.   $value = $url;         //二维码内容" X  l$ w9 r# m
  5.   $errorCorrectionLevel = 'L';  //容错级别/ {. d# n; E: E
  6.   $matrixPointSize = 5;      //生成图片大小
    / w3 T9 _/ d, D9 @  h( T" x  N
  7.   //生成二维码图片5 R( L  I/ C8 r" T, k
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);- y9 }# e+ }& f# o, {
  9. }
      X: T5 i1 Y3 `0 A) U
  10. //调用查看结果6 F4 f$ h5 G) W# s& |) L5 ^$ ?
  11. scerweima2('https://www.baidu.com');
    0 k. @* y* ]+ \5 e& m% J
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
& C7 s- P. x3 R! q& j, I" b; K% x1 `PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
7 y) Y3 v7 H7 F* \' u5 z6 k在线生成二维码工具(加强版)6 `& J" g, P4 |( |$ a- H' v& i
http://tools.jb51.net/transcoding/jb51qrcode
7 j5 C3 ^% A" x7 Y5 u( Z2 v在线二维码解码识别工具
0 Z4 D' B  S# c9 O& C+ x% n
http://tools.jb51.net/transcoding/trans_qrcode) G2 f) @' O3 S) p
- b/ n- V: _' X( g4 u" v2 f/ H6 l9 B

( H! Q; S$ ?* D& Z" p6 y, \' R2 [: V

+ Q5 [/ T1 U) i5 w$ N8 f8 J6 h
$ Q/ v# L* K) v! a, Y5 [+ ^

最新评论

浏览过的版块

GMT+8, 2026-6-19 22:26 , Processed in 0.047852 second(s), 19 queries .

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