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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:2 _6 U4 E* Q+ J) E( F2 \2 C
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。% D4 \0 g4 e9 V
前期准备:" V0 M9 Y5 S+ q  v2 f8 s' A; {
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
( k1 Q) {8 Y( N3 D7 z 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
) N5 k" l4 b6 @" B/ @1 D9 u! e方法解读:: L( M/ f1 p1 r$ O) M# r% f6 t( C) \
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
3 \# D" S9 a& K4 s  T; D' i
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    & V% j6 f  @  v$ Z3 K1 s. C
  2. {
    6 J  @" B9 y; u2 ]' X6 W' E3 S
  3.   $enc = QRencode::factory($level, $size, $margin);
    $ V; K# H7 O1 y" O" z/ D
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    ( Y0 ^4 t" E$ O
  5. }
    8 e  Y% E2 ~0 J) ]
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;5 t% x9 S0 P* e6 I, k
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;" K6 p/ k1 p( O; b- e
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;$ x9 J4 q: M! T8 s$ J8 S7 r
第4个参数$size:控制生成图片的大小,默认为4;8 P3 a3 ~; E- v9 _* a0 l* p: m
第5个参数$margin:控制生成二维码的空白区域大小;
9 ]2 K7 k$ l: a  B+ ^+ P. j. i% ? 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;  S+ D  X/ ]/ O6 h" E- M+ g
使用示例:7 Q+ K- f6 K+ y6 s- {7 F9 G
1. 生成二维码(生成图片文件)
4 y1 [, T  I1 y  d- W; a9 ]
  1. // 1. 生成原始的二维码(生成图片文件)4 ^6 Q$ e3 c6 J# T# F3 |
  2. function scerweima($url=''){
    , C' n8 g/ c9 Z0 D5 s
  3.   require_once 'phpqrcode.php';+ q) ?8 z* @" r+ E! ?* \  b
  4.   $value = $url;         //二维码内容
    8 d! ]3 j7 g4 e7 q7 t/ O
  5.   $errorCorrectionLevel = 'L';  //容错级别
    ; w2 ^# s) N5 D3 E2 L# h
  6.   $matrixPointSize = 5;      //生成图片大小$ R8 i2 e2 {- G  f' D4 c7 U
  7.   //生成二维码图片  f6 d* `* G6 d8 S6 H
  8.   $filename = 'qrcode/'.microtime().'.png';
    7 ^5 r% g& N- E$ c! ]* `" `0 ^
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);4 z/ s; w) l4 Q& `* p3 Y
  10.   $QR = $filename;        //已经生成的原始二维码图片文件& @# G4 e6 @1 k' t' e
  11.   $QR = imagecreatefromstring(file_get_contents($QR));; i' i  ~/ r6 W0 t! J8 ]
  12.   //输出图片" ^" L# @0 q4 o
  13.   imagepng($QR, 'qrcode.png');0 F! f  r- W9 q( Q$ W
  14.   imagedestroy($QR);& y% M9 s9 I! G; `# d$ n
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';; L; u: x" t0 w8 |0 L
  16. }7 Q# a3 W0 F2 a1 |
  17. //调用查看结果
    * \1 ^! @" P9 L6 u6 K
  18. echo scerweima('https://www.baidu.com');
    & u/ v* C  k- R) H' X- U3 e
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
% M( P) B$ k' T7 j. A5 e' s( [
  1. //2. 在生成的二维码中加上logo(生成图片文件)2 H/ i2 F1 N' T* g1 ^$ Z! E
  2. function scerweima1($url=''){0 d' _1 V# D( X
  3.   require_once 'phpqrcode.php';
    - G% }+ \( m$ w' u
  4.   $value = $url;         //二维码内容4 H" ]; d/ O- T8 ^: g/ ?, k( ]! k
  5.   $errorCorrectionLevel = 'H';  //容错级别. O2 f* \) u6 {3 E6 J* ]- F
  6.   $matrixPointSize = 6;      //生成图片大小  o3 O! J- q, T! ~  u6 X
  7.   //生成二维码图片. q+ B. c! R$ C; R7 n; l6 A9 v
  8.   $filename = 'qrcode/'.microtime().'.png';2 {( Y5 U8 I+ W+ d8 l3 {7 Q- w9 ]
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    ) Q) O+ o, c7 N& ?6 [, H2 T8 t" ?
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    6 j( v1 c- S7 n4 R! Q
  11.   $QR = $filename;      //已经生成的原始二维码图
    6 v: H3 I% U* k, l9 r  h
  12.   if (file_exists($logo)) {& E7 G- x- {/ k) N3 s0 x) x+ I
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。' V& w1 {5 c1 l1 z% Q
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。/ ]7 G0 {( a3 q0 s' I
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    3 z# U/ n4 }7 W. a7 k: h
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    " {9 \. V" k0 U. p( K3 X& S
  17.     $logo_width = imagesx($logo);    //logo图片宽度# ?% v  S# I+ u3 U1 t( |6 f0 L) U
  18.     $logo_height = imagesy($logo);   //logo图片高度
    , B3 P+ C0 v  Y9 _$ h7 k3 b& I( N
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    : P" b; I! ?- s$ I+ I6 j3 _6 R
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    . }, Q+ q9 d, j# M# [  d. e
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    ) L3 ?; r3 R8 ?1 z
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点7 j2 c4 O* f$ W6 X
  23.     //重新组合图片并调整大小9 l5 e4 t+ X1 Z0 v! M4 H) P
  24.     /*% G+ k. W$ m2 ~  z/ s/ T
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中! [. K0 }. m7 {1 ~; M4 l8 t
  26.      */; U) l% Z% r. e4 _  X
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    ! F* ~. L" v6 R. R# e7 K
  28.   }1 G/ c( F  n5 c. p( g( J4 e3 u7 n0 j
  29.   //输出图片
    , t2 Q. p2 c2 i4 V
  30.   imagepng($QR, 'qrcode.png');
    . D8 z' Q3 g7 e# P+ O
  31.   imagedestroy($QR);0 `2 ^6 G& k( H3 _
  32.   imagedestroy($logo);
    " ?- H9 b0 J: F( F1 S
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';: v1 R( h8 H$ m6 @
  34. }0 }& d; D# ?4 Z  v- p4 J" y
  35. //调用查看结果! V$ ?( b" j# D
  36. echo scerweima1('https://www.baidu.com');0 g  H5 d# H8 n; }" J
复制代码
3. 生成二维码(不生成图片文件)
$ @$ g0 u" F% u+ e% X& B0 X, @( m
  1. //3. 生成原始的二维码(不生成图片文件)  h7 O, s* a" |8 t$ H2 b8 k
  2. function scerweima2($url=''){
    . \( w& }& Q0 |; }
  3.   require_once 'phpqrcode.php';0 W. |: n% }" A$ b) l2 O. r
  4.   $value = $url;         //二维码内容, m$ P: _+ _- P) V
  5.   $errorCorrectionLevel = 'L';  //容错级别
    4 c  o; R2 V4 {! w8 K* d
  6.   $matrixPointSize = 5;      //生成图片大小* D  q& G7 G! w- m* [, }
  7.   //生成二维码图片
    ( Y' v0 _- d9 N2 u2 W
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    9 Y1 ~* z: }5 T' F
  9. }
    & \+ x; J* K5 Q  |: J( J
  10. //调用查看结果
    . [5 L, Y0 ~9 w7 |7 @: y
  11. scerweima2('https://www.baidu.com');+ T& x1 f1 D8 A- x: I
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
5 ^: Q# y( N  W* R1 {PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
; u( T1 d. k4 Q! S) r在线生成二维码工具(加强版)! Z1 G+ }' P: U* ^' W
http://tools.jb51.net/transcoding/jb51qrcode
8 {$ l/ }4 i/ ]( T在线二维码解码识别工具+ I5 j: P& p) F- P6 C$ S4 O6 }
http://tools.jb51.net/transcoding/trans_qrcode
  ?* p+ U$ u: @
$ v5 C* A6 s3 S+ Q5 D8 g6 z, F# k
" X6 z2 u7 e$ j! [7 t( K: f9 ]: s* L2 ]  w
8 x$ U0 h& j+ O. W+ M

: j/ @7 S% Q4 \' j" |9 _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:04 , Processed in 0.056478 second(s), 20 queries .

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