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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:& M6 z  a1 g  P, z9 C) ^! i
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
& E: z; Y5 P# V+ X4 j+ l' J! ^8 ^前期准备:
6 P& q9 c0 n3 t, ?% [1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
+ n" W$ y* Q# O1 v* a2 F 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)6 G( L6 ~" f8 z& B1 a
方法解读:
6 Y8 F. l2 t2 S+ m: X  J下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):- M6 I. w2 \; g5 z5 G+ m- C$ P: G
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)5 `. c$ d  ^7 U( F+ l( l
  2. {
    3 \' y  t( [& k$ b5 D- y+ E
  3.   $enc = QRencode::factory($level, $size, $margin);
    ) O$ N  b$ |; r# p
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);2 ?4 M: Z# X2 G. ]
  5. }
    0 C2 V' q- e! ?: X, W
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
+ l$ |$ i' I4 h7 m) T8 U 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;/ h9 T2 K$ `& u9 Y  n: p
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
- `# A+ a. J' S" h. P% b 第4个参数$size:控制生成图片的大小,默认为4;
, m7 O! k3 a. g5 ]5 o& k 第5个参数$margin:控制生成二维码的空白区域大小;% _# ~* G/ z" S: y- [. s# Y' J7 X
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;% w; U9 }; E2 m6 z0 d
使用示例:
( G# m- ^2 ]; ]8 ]+ h1. 生成二维码(生成图片文件)" N8 `# P7 k8 \; F7 k
  1. // 1. 生成原始的二维码(生成图片文件), {& J  t2 `6 i0 C6 U
  2. function scerweima($url=''){& V4 }: C8 x& [0 n0 \2 f4 g# Y5 d
  3.   require_once 'phpqrcode.php';
    # k( v. |; s* O+ `
  4.   $value = $url;         //二维码内容; T: K, l* ^: p* i3 J! D& C
  5.   $errorCorrectionLevel = 'L';  //容错级别
    . |5 N8 T3 m$ l9 k3 C- ]7 J% }
  6.   $matrixPointSize = 5;      //生成图片大小
    - J/ @7 @, W8 G( b& B6 R
  7.   //生成二维码图片9 y; a1 O! X# d  Z
  8.   $filename = 'qrcode/'.microtime().'.png';  P/ Q, j4 U. u# K
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);+ B1 j5 g4 S, ~
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    * q8 n  t% t3 o8 v. [& a( e
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    0 t  e, y$ \# D
  12.   //输出图片
    5 b- H( N" H6 \+ b1 E! Q; ]# C' h
  13.   imagepng($QR, 'qrcode.png');) @( q1 K4 i, I1 s. u8 v3 F
  14.   imagedestroy($QR);- ^# y9 q: w' B! V% u
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    / P; l( B, e% R+ @  x* V
  16. }5 r# n; o2 J" p6 w5 ]6 [
  17. //调用查看结果
    6 S& R7 v. j" k8 S" j8 a# `- Z3 D; d( N
  18. echo scerweima('https://www.baidu.com');
    ; j# {( T9 P& I3 I% o
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
  [& s& I4 ?% w- W1 N) r
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    1 S0 k2 i2 G* U8 T
  2. function scerweima1($url=''){' J% U# F+ |5 L  E
  3.   require_once 'phpqrcode.php';9 r0 \) y" [. M! m
  4.   $value = $url;         //二维码内容
    % z0 p/ s4 V) @( g! m
  5.   $errorCorrectionLevel = 'H';  //容错级别
    8 ?# ]1 A% E" j7 l4 q( |/ k0 B
  6.   $matrixPointSize = 6;      //生成图片大小& |( `) F  e! x7 b. g* t3 D
  7.   //生成二维码图片* F: f: I1 J: i/ _7 f
  8.   $filename = 'qrcode/'.microtime().'.png';4 b* a' R$ e2 q) O
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    & f6 n( V2 c( I5 K$ I+ T
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    4 S& K8 t  e8 r7 d  S
  11.   $QR = $filename;      //已经生成的原始二维码图, P/ X& L- [7 F& @
  12.   if (file_exists($logo)) {- n) U, n- w5 f/ E- W
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。* W; S" ?- e8 S) x) P, ]
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    . a; `% ~0 b/ |3 J( p
  15.     $QR_width = imagesx($QR);      //二维码图片宽度  \* @$ u/ V: G$ P, }
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    ) r/ g3 B: O8 M4 \% K; p
  17.     $logo_width = imagesx($logo);    //logo图片宽度+ \" y# r. G1 T& u) S' T. u
  18.     $logo_height = imagesy($logo);   //logo图片高度  k1 D$ x% ?4 l% v
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    ( ~  E1 s5 O4 o1 O( p. w  y: z
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    + v) o9 A1 k: A
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度; Y5 g8 b1 W' ]6 |" s/ Z: n/ ?# D
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    ' n& r2 p+ F# b" U* X$ Z# ~
  23.     //重新组合图片并调整大小
    ; v/ v; W5 ~, a2 B
  24.     /*: ~! e: o0 O9 |
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    $ a* F8 f# o, A
  26.      */( Z# c# W1 I# _, F. s
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);; I! x% W" G( ~' G4 [
  28.   }
    , [, Y0 C9 x; i. W' ]4 Y
  29.   //输出图片
    # M& T9 v) Y% Q
  30.   imagepng($QR, 'qrcode.png');
    3 Z9 C2 c8 p# X& U0 y% N: C% ?4 k
  31.   imagedestroy($QR);( p, G" V! S4 D4 U7 |
  32.   imagedestroy($logo);
    . ]6 |4 Q& q6 ?5 s: g, E
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    - R7 I8 A* }( ~& D. Z3 Z
  34. }
    ! J- w0 x7 c' Y/ [  A3 J
  35. //调用查看结果
    ; _" V& q- A: d# p7 x' \: @
  36. echo scerweima1('https://www.baidu.com');5 J+ t" f6 W3 N4 V
复制代码
3. 生成二维码(不生成图片文件)4 k$ A) c/ I/ x+ w
  1. //3. 生成原始的二维码(不生成图片文件)
    2 O/ S! W7 l. ]: W
  2. function scerweima2($url=''){0 L* n* K/ \! q0 @
  3.   require_once 'phpqrcode.php';6 I6 T9 {, Z/ T8 m" L/ I* l
  4.   $value = $url;         //二维码内容
    2 j6 o, }- k: N6 ?$ {
  5.   $errorCorrectionLevel = 'L';  //容错级别& Z' N% {" T( {
  6.   $matrixPointSize = 5;      //生成图片大小+ U( ?0 @( {7 p! i, }7 G; C, n9 e
  7.   //生成二维码图片  b3 h" x# G+ N; z. k5 T  Y6 ?8 f
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);# ^" X) u8 D( _# E6 v
  9. }
    " A5 U/ i# S  Y: a5 i
  10. //调用查看结果
    . ]  k5 h; b" R# {0 y0 L
  11. scerweima2('https://www.baidu.com');
    - L0 n3 P5 d6 v) }6 }
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
. c) \; T+ W# |/ d) a2 dPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
3 k- S: j; G0 j8 W8 a在线生成二维码工具(加强版): }7 S) `$ i8 Y( c+ A
http://tools.jb51.net/transcoding/jb51qrcode3 w( T2 x4 {$ d
在线二维码解码识别工具
" d: @0 o8 y! e2 y
http://tools.jb51.net/transcoding/trans_qrcode8 ~; N, A3 t6 V
5 z, u4 }3 }( A$ U

% ?# ?+ L1 ?1 [& b0 Z3 G$ i& p) B5 g4 j
' v# W& Y& `2 ~" G6 \- s
2 _2 c! l7 n7 H( j. c5 Y5 M. \/ H3 m3 ^" F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:11 , Processed in 0.056995 second(s), 19 queries .

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