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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
* ]0 Y2 |/ {" p& P% G9 T使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
4 o! R: a  w; e& w& D4 h4 M前期准备:
" S+ r. Z! o& z4 C8 H2 S1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/% |8 M, p+ _+ X7 V7 {) ^9 r7 Y
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)" M- \& s1 S, ^2 L& a! w
方法解读:! |# z1 J8 Q9 M2 U, U
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):2 C4 {7 e* R9 Q
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    - [6 H8 g+ o; y% L; Y
  2. {( H4 f0 y+ {! v7 r) o
  3.   $enc = QRencode::factory($level, $size, $margin);$ [6 v% L2 ]( Y) u  z8 [, T7 {9 g7 k
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);5 U" r: R% Y5 s8 I5 v2 P8 N# N
  5. }
    " J/ @) p1 j. j
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
5 _0 s4 z" C8 Q" u' C 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;# E) v0 i  B% y$ b: b
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;; V1 \8 d0 b9 V6 L$ K& s8 Z
第4个参数$size:控制生成图片的大小,默认为4;
5 ?4 N4 P* ~* F5 N 第5个参数$margin:控制生成二维码的空白区域大小;
6 `2 X5 v5 [7 s$ x+ M2 ^: Q6 r 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
9 M, O( w7 L; W$ l使用示例:; o. x# Z( A1 R0 x
1. 生成二维码(生成图片文件)5 N, S, o0 O1 x" U6 t3 v5 s
  1. // 1. 生成原始的二维码(生成图片文件)2 X' o4 O" x! J# i; U
  2. function scerweima($url=''){
    : ?( E$ j0 @5 F0 e
  3.   require_once 'phpqrcode.php';
    % I: [7 E  i, y0 y# b2 l9 G/ J
  4.   $value = $url;         //二维码内容
    " e! i; h. U( W
  5.   $errorCorrectionLevel = 'L';  //容错级别
    ) a3 E5 Y) E8 {+ \8 k8 B
  6.   $matrixPointSize = 5;      //生成图片大小
    - o: Z' n) j+ h( R! S/ i
  7.   //生成二维码图片
    % I; X9 U4 F) q) N+ ~! H
  8.   $filename = 'qrcode/'.microtime().'.png';
    2 g1 T3 A2 T1 O: I; m
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    $ q* ]8 R1 R" f
  10.   $QR = $filename;        //已经生成的原始二维码图片文件* [" b" r' P; m
  11.   $QR = imagecreatefromstring(file_get_contents($QR));. L7 R  A/ A* }$ b! a7 C* P
  12.   //输出图片4 S+ E+ J6 M8 u% p/ V) k" W
  13.   imagepng($QR, 'qrcode.png');3 ?6 x) s) ]0 k% m' }4 Z3 S; j
  14.   imagedestroy($QR);8 d! w5 [* r0 ]2 B
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    7 }+ z8 s- Y9 V
  16. }
    $ K, c) d! {: C" ?  X5 @
  17. //调用查看结果1 T5 y0 ^2 \! G, x9 P+ s! o
  18. echo scerweima('https://www.baidu.com');" v5 X+ K- b. V% t2 [
复制代码
2. 在生成的二维码中加上logo(生成图片文件)6 s; O, h! ^! K8 u# z( s1 t/ R3 _
  1. //2. 在生成的二维码中加上logo(生成图片文件)1 n' N  {# V& p
  2. function scerweima1($url=''){! t6 h2 |4 G1 h; e2 y
  3.   require_once 'phpqrcode.php';
    3 o5 v1 P! K: C, n; W+ s6 M( Y
  4.   $value = $url;         //二维码内容+ m5 q2 t" O! t* `; m
  5.   $errorCorrectionLevel = 'H';  //容错级别
    % o1 L8 T& C5 x$ K9 `- g
  6.   $matrixPointSize = 6;      //生成图片大小
    * U" h* z' @5 q6 i; J0 l# f
  7.   //生成二维码图片
    , G( f, f) K7 e0 p& {6 ]6 S7 W" f
  8.   $filename = 'qrcode/'.microtime().'.png';
    6 K$ {% I3 B5 }& T$ o5 O
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    6 V7 I8 v* j5 |. n1 E& \( F5 g
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片/ r" O. R  g) `9 k4 }' }
  11.   $QR = $filename;      //已经生成的原始二维码图$ m1 H3 i" v9 a
  12.   if (file_exists($logo)) {
    ) c7 L. s6 D  Q$ _
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。6 y# R- f# s: ~; B8 H
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    3 n% A8 T9 P8 v
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    8 t7 j% u4 m' Y+ U7 I6 ]
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    - T3 l9 Y% o, t7 \2 }  s/ @
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    ( g7 }- j6 N5 c' Y0 s# y6 z
  18.     $logo_height = imagesy($logo);   //logo图片高度% `. b0 u5 n8 K
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    % F  I0 }* ^3 m3 T7 h0 M4 @! p
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    # R, S9 z0 Z6 D
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
      J" l' e. k; {9 C8 b
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    & w9 L' m) e" f, k; Z" g
  23.     //重新组合图片并调整大小
    , w. f' U4 M& K% k
  24.     /*+ w5 k1 v8 S* P, U+ o- N
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    7 H7 ^0 v# U' ?" t& K
  26.      */
    4 T  S) s! \6 _$ J
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);! i  F' d, p9 x9 @: s+ F( A
  28.   }
    ) G2 y) Q- x3 T9 l  \
  29.   //输出图片8 U4 Z8 S% S% G" x9 j) q/ d' h
  30.   imagepng($QR, 'qrcode.png');
    - I5 F& Y) R3 p8 a8 \! X" v" l% v
  31.   imagedestroy($QR);9 {: O, P, L( g5 p
  32.   imagedestroy($logo);
    $ x. V4 w6 B/ g' X% C& k+ ^
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';8 M% V( D3 s5 i* t# m7 V, Y
  34. }
    8 S9 Z; |1 h- N: ?* C' i" T( I
  35. //调用查看结果
    4 g6 t0 i  a* y* e+ w
  36. echo scerweima1('https://www.baidu.com');& g7 v, O4 c- b/ w6 p) h8 W# k% t
复制代码
3. 生成二维码(不生成图片文件), @) e8 w1 Q  h6 K- z' S" E
  1. //3. 生成原始的二维码(不生成图片文件)* D, m% a4 v# r: B( |. g
  2. function scerweima2($url=''){1 `* g& m( E! P, g) l, Q2 ?* s
  3.   require_once 'phpqrcode.php';
    , S# N; x  R- e" K
  4.   $value = $url;         //二维码内容0 U: q6 l# j# ?& c3 t- w
  5.   $errorCorrectionLevel = 'L';  //容错级别
    9 j: n4 k6 P) K9 n' f
  6.   $matrixPointSize = 5;      //生成图片大小: H6 c: ^+ p1 U( _# o
  7.   //生成二维码图片
    - f, z, B! Y  F6 _
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    0 D$ I# i; x8 N+ S( L
  9. }6 r0 [2 I( W! }' y  M
  10. //调用查看结果8 O  n& C4 _' \$ {( N
  11. scerweima2('https://www.baidu.com');
    : x# D. c6 Y% w, V
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。8 a9 P$ f- u0 Q2 G. B+ o
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:7 u9 V+ ], v, P6 G
在线生成二维码工具(加强版)) X- L0 `9 U0 E# _  h1 G
http://tools.jb51.net/transcoding/jb51qrcode
7 R+ T* s1 x- F# P7 V8 d在线二维码解码识别工具
; o7 z7 k) H3 Z
http://tools.jb51.net/transcoding/trans_qrcode
$ l) L1 H- q3 O8 ]- m# T: f. Q/ A9 E+ N( F* q* B
' V3 |7 R8 ~( A' o

7 k9 G: u6 k, f# y; T; ?6 m# W6 K
. I( [/ Q8 f# H4 f6 ~. ~) K; B, j3 q& |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 22:48 , Processed in 0.085369 second(s), 21 queries .

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