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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:2 T1 j8 {2 {% D! E) U0 i
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
1 \9 w( c+ y" Q: m' H9 d前期准备:
2 p0 p2 P' h( M  f1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/$ r$ e1 |) r' G% g$ T4 @+ ]' `
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态); B' G) m. C5 A2 b
方法解读:
/ H9 f( B- g/ f下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
5 P2 G- b1 ~: V+ D9 m0 ~' P% c* ]
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    7 }9 v5 ^% s6 Q- j6 q# H
  2. {
    8 ?5 ^+ d) D: D' G0 B  r* V1 a! |
  3.   $enc = QRencode::factory($level, $size, $margin);5 F  ^/ D' y  O( K
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);" S. g( H9 e) m. U( L0 g8 y. G
  5. }6 ^4 D7 {$ R& k
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;+ a3 c. q' |8 d
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;. l3 x, i2 F. m* X: [% J
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
% H0 ~& r; I2 S( E- O: J/ K  Y 第4个参数$size:控制生成图片的大小,默认为4;
, o" ^8 k* x$ P* j: q 第5个参数$margin:控制生成二维码的空白区域大小;
; v+ K! \4 B4 U( `$ P7 S0 B$ Q 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
/ w" S' R. f  H- d9 |9 _0 T" r) \3 @( }使用示例:: f9 D. s, q& Y) r  ^1 d
1. 生成二维码(生成图片文件)
+ }" k; l" ^6 H$ |! {6 x0 j
  1. // 1. 生成原始的二维码(生成图片文件)
    * G8 p$ y$ v& H1 S' e: q  O
  2. function scerweima($url=''){  P8 H2 H) h4 }) b& U: i
  3.   require_once 'phpqrcode.php';$ S, P! {) u" s( Q6 ~
  4.   $value = $url;         //二维码内容6 W* P) X; T/ i! ~
  5.   $errorCorrectionLevel = 'L';  //容错级别& G/ f9 x. c# \. L
  6.   $matrixPointSize = 5;      //生成图片大小
    7 M. R4 D0 s9 n! S+ e8 [5 {% }. z/ b! R
  7.   //生成二维码图片
    4 G% p4 K1 `+ s- D8 H
  8.   $filename = 'qrcode/'.microtime().'.png';
    ! d4 G' U4 X8 i4 \9 X
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    9 c/ k" N) L5 C( j9 X9 _
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    3 ~7 I1 h6 ]% A
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    4 r' i4 ?& w' M
  12.   //输出图片
    8 Y1 ], s2 d+ g% ~5 V$ ?& E
  13.   imagepng($QR, 'qrcode.png');$ Z8 b" X' C/ H( ~! X
  14.   imagedestroy($QR);  a) U5 I3 Q& X! m
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';6 S) j& r7 j" u
  16. }1 r+ ?* Z* Z  Z+ T5 j) ^* c
  17. //调用查看结果/ Q* D$ k3 R7 p& D5 a# `
  18. echo scerweima('https://www.baidu.com');
    , L6 g  a% s; c2 A+ ^3 \
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
+ [& F' B# c# y1 c: n9 _
  1. //2. 在生成的二维码中加上logo(生成图片文件)$ U+ |8 e0 p7 y% }: a
  2. function scerweima1($url=''){) W' w3 c4 a: j4 W# n# z5 U
  3.   require_once 'phpqrcode.php';
    4 {% d% {; ~6 q; a, z
  4.   $value = $url;         //二维码内容1 {$ h  a5 }5 L6 ]" a
  5.   $errorCorrectionLevel = 'H';  //容错级别
    % O7 m6 W: T* {
  6.   $matrixPointSize = 6;      //生成图片大小- C$ P' [8 f0 k; j0 h7 ~/ o" |
  7.   //生成二维码图片( I; h! c1 H9 K! N0 r+ O- p
  8.   $filename = 'qrcode/'.microtime().'.png';& r& v% O  b: r) P# |
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    5 y! ^0 n/ V0 ~9 E+ ~& a6 \
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片# I/ h3 j/ @7 M' M/ N) q4 B
  11.   $QR = $filename;      //已经生成的原始二维码图
      ?6 ?% X+ |9 e3 V" a
  12.   if (file_exists($logo)) {
    ! f! u2 M4 F) I7 n
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。) ~/ s) X2 D' o! m8 I
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。' q  A; v, G6 x  R& t; C2 k3 R
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    " f( J, N$ y$ ~4 O6 s8 H; e  }
  16.     $QR_height = imagesy($QR);     //二维码图片高度+ K; ]; @) j0 Z4 o  j
  17.     $logo_width = imagesx($logo);    //logo图片宽度; g* ^% s* W) M1 f5 K( h
  18.     $logo_height = imagesy($logo);   //logo图片高度
    ! x* c4 d6 K7 y' u3 a7 l
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)% d, i/ Y# Z7 @+ e* V5 |
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)3 ?& m& s0 W: T4 x% k
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度  L* {5 ^2 _, _; c- R
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    , C& g' f4 F' t% G' x
  23.     //重新组合图片并调整大小- N/ p' S, n$ x/ I1 h, n* \1 X
  24.     /*
    * W: X7 ?+ |) m7 r4 `; x/ J
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中6 p; F5 w. u& R1 W+ ~0 Q
  26.      */
    9 n+ k$ @+ v/ k4 s4 @0 ]2 o0 W
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);* T9 y  e3 j$ T0 E! Y9 h4 |
  28.   }
    ) W! E3 ]- m' Y
  29.   //输出图片
    0 X" n3 v$ L3 A  ?  R
  30.   imagepng($QR, 'qrcode.png');5 q. c/ a6 [% L3 [9 C
  31.   imagedestroy($QR);
    + ^9 @) j+ @6 |5 n  n
  32.   imagedestroy($logo);
    ! Z) F+ o* q) w. ^' f
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    - J8 L) h/ r2 C
  34. }! s: w. R+ D' b! E6 D/ v1 M, U
  35. //调用查看结果( S- j  n' c  l
  36. echo scerweima1('https://www.baidu.com');2 }% S/ O5 Z- C1 r$ `: y
复制代码
3. 生成二维码(不生成图片文件)7 j5 e7 U9 K' \2 ~- ~
  1. //3. 生成原始的二维码(不生成图片文件)- y) X  v3 R! H5 Z4 V- v4 p
  2. function scerweima2($url=''){
    / P7 u& t3 L" B
  3.   require_once 'phpqrcode.php';
    : c) @$ S6 T( a$ O; Q
  4.   $value = $url;         //二维码内容
    ) j- z: Z; a7 r7 @% u
  5.   $errorCorrectionLevel = 'L';  //容错级别8 {  z+ o3 J3 F6 ~2 N/ Q7 h, |
  6.   $matrixPointSize = 5;      //生成图片大小
    # U" W  s- _6 g
  7.   //生成二维码图片
    5 G  W: L/ n3 |* ?6 i! }
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    3 X$ @7 n, s( j: p9 y$ ?: h  v: `
  9. }' L0 d7 `& D! V# A5 `
  10. //调用查看结果
    ( W+ m( ]# \, Z0 u5 m0 {% q) t( ^
  11. scerweima2('https://www.baidu.com');
    / ?6 D" q/ y# p3 q6 W' B: \
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
( G. i% l. Q; R! O  N- ^PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:( ]% s5 v% W7 E% U+ B4 B
在线生成二维码工具(加强版)2 {- u+ ?9 E0 @
http://tools.jb51.net/transcoding/jb51qrcode6 N9 d6 T7 D, C
在线二维码解码识别工具- [2 N7 g; P, j4 [( R, T  P0 G
http://tools.jb51.net/transcoding/trans_qrcode# z; l* y- F- Y. R0 z2 x7 s/ m
  c6 ~/ r% H- O4 \& @/ N. S+ p
* u+ V7 t* W7 y1 K/ M

. I, ]" V, i# a7 Y" b. F
# c, D+ h7 ^% W3 C# N4 Y6 R
! h! B. M4 o5 p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 07:08 , Processed in 0.049069 second(s), 20 queries .

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