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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
" c1 ^0 X: f) P2 a& e0 B使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
+ @4 P9 t) s0 t: L5 O  p前期准备:
4 Z9 E7 t5 f! ]1 ?) w1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
2 u+ i6 d' a. v, r3 r 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)/ F- U0 o; F/ {- y
方法解读:7 r- H2 @7 W7 A6 @4 g$ b" \
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):% ~: n- N. s6 w8 y& [; B
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)* [8 \/ s) ?/ N( _  V, M3 N
  2. {
    % l1 j% V+ Y: }. J  J+ B  ~
  3.   $enc = QRencode::factory($level, $size, $margin);
      ^7 H9 p, L! h7 [) w" ]
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);" E! {5 T0 ~& N/ E$ d' P1 I- E
  5. }3 T' o# b  \8 A9 ^: R, l# I3 K
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;+ i) v( @0 C" h! \
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;! q& X; c" f, y" K9 U3 \' H
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;/ K% {2 Z- G9 [) U; F
第4个参数$size:控制生成图片的大小,默认为4;: \: I$ ~& D* P
第5个参数$margin:控制生成二维码的空白区域大小;
2 i& k) \5 u- S. d4 _ 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;& V& T2 w5 ^# Q1 C5 }7 L% E
使用示例:
) \9 Y" ~: @& ^; X" D5 X1. 生成二维码(生成图片文件)4 q# `8 S9 n$ c* S( E" j! g
  1. // 1. 生成原始的二维码(生成图片文件)
    / [" z. h& e5 O4 r
  2. function scerweima($url=''){+ b9 ^- M! g' p$ P: Y
  3.   require_once 'phpqrcode.php';
    5 w; J. M/ N. A# N# U, l! P
  4.   $value = $url;         //二维码内容
    4 z* A7 A! y. d% c1 e. M! Z4 K( z: X
  5.   $errorCorrectionLevel = 'L';  //容错级别- Z  j  i- X" e# ?+ ~: f: X
  6.   $matrixPointSize = 5;      //生成图片大小$ p' O" l# P  L8 a' A' j7 Z+ O9 l
  7.   //生成二维码图片
    1 ]& o) N) T4 G( N) y
  8.   $filename = 'qrcode/'.microtime().'.png';
    7 k- g+ u4 W, L$ ?
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    - o1 E  c; t! \% g% v! G& N* |# ]
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    7 h, D1 R8 I* F( M/ {
  11.   $QR = imagecreatefromstring(file_get_contents($QR));+ _+ ?0 t1 a5 Z. A% H
  12.   //输出图片6 w( u0 j* z! f0 G, S5 l
  13.   imagepng($QR, 'qrcode.png');
    ! B/ J4 b# a* i% q  ^8 `
  14.   imagedestroy($QR);" ?& t$ u/ K" O) F* z
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    . \. f0 A2 ~" E& ~2 S; d- Z1 d* J
  16. }1 s" f8 K0 }% s& p* V) F4 N
  17. //调用查看结果: C" ?. l& |; w/ s2 w
  18. echo scerweima('https://www.baidu.com');
    : D& c, l# E' u1 ^6 J; F
复制代码
2. 在生成的二维码中加上logo(生成图片文件)6 {$ G" w5 K4 y4 u; w  n
  1. //2. 在生成的二维码中加上logo(生成图片文件)/ B0 z% n  u0 S* d7 C
  2. function scerweima1($url=''){; \" }( \# j( X; A
  3.   require_once 'phpqrcode.php';
    * a; d, C* X$ i, `# y& s
  4.   $value = $url;         //二维码内容
    5 ]# I* b& C* ]" I. Z8 J
  5.   $errorCorrectionLevel = 'H';  //容错级别, l; U. K" I$ k: N8 v
  6.   $matrixPointSize = 6;      //生成图片大小- h/ D: m* V" D1 _2 U# V
  7.   //生成二维码图片& F7 t2 u+ D/ J2 V; ?
  8.   $filename = 'qrcode/'.microtime().'.png';* \' W  J5 i1 ]; W8 A5 I/ P$ `7 s& `
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);" O) {, ^2 i3 \2 }: z+ s
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    3 O  y* t+ r7 m2 D
  11.   $QR = $filename;      //已经生成的原始二维码图
    $ _; X- ?& p2 E& l- k
  12.   if (file_exists($logo)) {# ]8 ]1 O" W; e" M8 Y
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    , k! q- q+ L7 P: W4 O
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    % M4 Y1 o8 G( _1 h
  15.     $QR_width = imagesx($QR);      //二维码图片宽度( v! O3 A6 w/ m
  16.     $QR_height = imagesy($QR);     //二维码图片高度, u) G8 C# J3 n$ m
  17.     $logo_width = imagesx($logo);    //logo图片宽度+ _" l( T7 h# C0 }) q: A" E
  18.     $logo_height = imagesy($logo);   //logo图片高度
    " l! D; @% |% p7 b0 w4 ?- u
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    7 {* x( p3 y- ~1 M  v$ B
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    . s; k2 x0 @. V
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    9 \" V) Z9 {8 e* }
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点2 _, x- Y1 W/ @# P$ G
  23.     //重新组合图片并调整大小# T* o$ i# e4 v/ L0 [% j! |! J
  24.     /*5 i+ i5 w  C9 A8 l' A
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中# U. D8 J5 C; a9 H6 A& r, |) n
  26.      */
    5 j3 H; o8 X6 l
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);- Z- M* U; ]+ E; U" n% `4 e
  28.   }
    8 C# }4 K8 H2 V6 x0 L, K% N% K, u
  29.   //输出图片
    5 p6 b" t3 }( H7 q1 g; r+ r
  30.   imagepng($QR, 'qrcode.png');
    1 y! _' G( ~6 U5 W( W
  31.   imagedestroy($QR);
    + Q* A- y2 u7 e$ s3 m5 |
  32.   imagedestroy($logo);
    0 Z4 c, |1 W0 |0 F
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';" }4 E- A5 t* y: }3 w) w
  34. }9 d8 G  @+ Z$ n( b8 e1 {9 z4 n9 E' r6 x
  35. //调用查看结果0 m+ H7 x8 S- a
  36. echo scerweima1('https://www.baidu.com');. p. q' H- J3 d
复制代码
3. 生成二维码(不生成图片文件)( [9 E8 A: {$ x0 n+ s' w* `
  1. //3. 生成原始的二维码(不生成图片文件)8 N5 i6 J! y7 c: D1 P6 @* }: {
  2. function scerweima2($url=''){
    5 F, l7 P* S$ i. N8 O6 W, c
  3.   require_once 'phpqrcode.php';7 H% v0 q1 ?! m/ h( x
  4.   $value = $url;         //二维码内容5 \+ M- W2 `1 P5 Z7 d4 Z
  5.   $errorCorrectionLevel = 'L';  //容错级别
    % w7 {. v; k; `+ X4 B* y% v' t
  6.   $matrixPointSize = 5;      //生成图片大小
    ' Q! e0 H) O4 c6 Y
  7.   //生成二维码图片* H( b1 ~& i9 E8 w  N: o
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    8 f$ Z9 ?6 L5 j$ B9 R! k- d
  9. }+ u$ N: h7 ~! J0 h) a( ~  V6 Q. _! g
  10. //调用查看结果5 q7 y" i7 ~1 |1 x: X0 e
  11. scerweima2('https://www.baidu.com');
    5 x; }! e. P  F/ f
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
5 ~. s  z' S1 O2 w. _* ?PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
% i1 _! N& I7 b6 B, m3 b在线生成二维码工具(加强版)% V! u* c/ ?7 y5 {0 x2 Q" i
http://tools.jb51.net/transcoding/jb51qrcode/ L" _4 M3 Y8 R. P# x! J' a, T
在线二维码解码识别工具9 W& C: o, Y7 h( G5 x: v
http://tools.jb51.net/transcoding/trans_qrcode
9 X: D, Q- `! q1 H1 }
; c* t4 {. D+ }- u( [7 E8 {/ d! {, K3 u) Z' b1 |8 ~% @# H
3 u- G% M! d9 `; P: Q- r: M

2 p7 o; [! K5 v. A) P
2 ~8 z  b* Q$ E4 ^9 M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 07:05 , Processed in 0.051941 second(s), 19 queries .

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