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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:3 X* W) T" w* L3 O  w5 ^1 S- r
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。+ C+ K6 I# A. [/ F
前期准备:
3 K5 v$ C- D" v3 P# C$ H1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/! O+ B( R+ F, \8 n  T' }: E- R+ k$ T
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)( @2 I* }: {4 l  [( _. D0 ?
方法解读:3 e' ~) _, W# K% J8 \* O
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):% [/ X8 _7 O% P$ A
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    - x( I* [) g5 S! U, }
  2. {
    ) @: B8 H' }# [# t/ U
  3.   $enc = QRencode::factory($level, $size, $margin);
    9 C& z4 z5 N; b9 v' N. @! Z$ p
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    7 Z3 m+ W9 P3 {# A8 o
  5. }
    4 r4 _4 N4 r$ w1 p' ?+ \- r
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;# w2 T$ T% v- f) ?5 ?. M
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
1 b6 S- u/ P$ e' R 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
3 ]: C; \  ], R: k9 [/ r" n% r 第4个参数$size:控制生成图片的大小,默认为4;; L8 ~% z9 B+ ~# S
第5个参数$margin:控制生成二维码的空白区域大小;
. S$ I( g2 U) i  Z! w, s6 `8 d 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;8 r0 B4 |) ~$ z1 Z5 C% m7 ^
使用示例:; V% M. v* d$ v/ L
1. 生成二维码(生成图片文件)+ d, S: N% Y7 s( I0 k6 P
  1. // 1. 生成原始的二维码(生成图片文件). p+ t2 v& O7 o
  2. function scerweima($url=''){, C& E0 B9 ?" Z# L* M3 N+ Y
  3.   require_once 'phpqrcode.php';
    7 E  q; r- `$ ~8 c: i9 h
  4.   $value = $url;         //二维码内容
    & `* `+ B7 I! l) k8 J  C3 A- J
  5.   $errorCorrectionLevel = 'L';  //容错级别
    % a# R5 @: U' w/ q! j& C
  6.   $matrixPointSize = 5;      //生成图片大小* Y, u' z$ g0 f0 R0 p
  7.   //生成二维码图片; W' n/ e) L" y/ S
  8.   $filename = 'qrcode/'.microtime().'.png';! A/ j* H1 R: o6 T  h
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);  Q3 r* `2 O" A; C) W: \* P) J9 {
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    % D1 p2 H5 |( V8 x- L; `9 d% Z
  11.   $QR = imagecreatefromstring(file_get_contents($QR));5 B, n8 K: n& n4 o5 U- _7 P1 k
  12.   //输出图片' y5 k* n. Z2 ~
  13.   imagepng($QR, 'qrcode.png');
    # {1 |6 ]" c3 n4 Z# U( n/ U8 f
  14.   imagedestroy($QR);
    $ Y" W$ B8 I: q& ?  \
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    / i& m  ]& u. \
  16. }' o0 w, Y% V7 l+ A* r* s8 O6 Y
  17. //调用查看结果! r( L6 _  ^; a- {
  18. echo scerweima('https://www.baidu.com');( u, n$ f+ S- Y
复制代码
2. 在生成的二维码中加上logo(生成图片文件)- _4 F) k1 U. P
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    5 v) l$ K# c) T% G! R4 L" {# y
  2. function scerweima1($url=''){
    2 h) e2 ?# f4 F( N2 F1 T  c$ D3 U
  3.   require_once 'phpqrcode.php';( x' L! ]5 R+ f" N* c
  4.   $value = $url;         //二维码内容
    ; s, m, B' j' [2 J) L4 j
  5.   $errorCorrectionLevel = 'H';  //容错级别
    ' Z- ]1 Z5 r8 R+ H. r* f2 Q
  6.   $matrixPointSize = 6;      //生成图片大小
    # |6 K  q/ j! c% S* F2 f9 X
  7.   //生成二维码图片1 s* w" J6 l- I$ q6 T1 \: w, ~
  8.   $filename = 'qrcode/'.microtime().'.png';
    # e/ a: o. E2 h5 I# J: f9 K' R
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);/ A* w+ i4 Y% V0 e1 h
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片0 H( W! A+ f6 X6 u7 R
  11.   $QR = $filename;      //已经生成的原始二维码图
    5 p* q; v: |3 G! @/ E; g7 k
  12.   if (file_exists($logo)) {$ m8 C5 x3 m* E6 w
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。; r" }3 Y. }' _$ d7 b* T' r
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。6 m, b, l* V3 |( R
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    & {0 k; s/ h! q
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    7 g/ Y1 V/ ^/ n9 d  g
  17.     $logo_width = imagesx($logo);    //logo图片宽度8 l% C. k, n$ T- ^( ]
  18.     $logo_height = imagesy($logo);   //logo图片高度0 ^) B0 i1 d) s( t6 L6 O3 h" Z
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5), ~7 e3 H, {& V+ Z2 Q) L2 m
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    $ V. \# t7 W) z
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    ( {3 V6 ~) d# }' p$ n6 Q: j
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点& }/ l1 i) ^+ k6 K  u; z1 A
  23.     //重新组合图片并调整大小
    * D+ Q+ h6 h1 Z2 X9 L- T9 X  @
  24.     /*
    ' I6 {; W% A4 k" i) ]$ I
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中9 P. J  O7 f; G! X) U; f9 P
  26.      */
    ; p3 S3 d5 n) m' U: P5 S
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    1 E* p. M1 V9 R2 V3 d2 w2 x8 p
  28.   }
      c( E( j: O% X; j& c. s* ?
  29.   //输出图片
    ) O% ?# j, e" g1 U
  30.   imagepng($QR, 'qrcode.png');1 n, ?1 v; w; ^2 X: u& @, u* m
  31.   imagedestroy($QR);1 @& M* c  _$ \5 `7 s
  32.   imagedestroy($logo);
    9 b5 k* B! k1 y9 s4 ?* G
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    - |$ \* S1 B5 r; D, X+ u+ e5 ?3 A
  34. }
    9 f( d# V0 ?: ~& F5 k1 E
  35. //调用查看结果
    " k: N' Q8 |' O2 M& o
  36. echo scerweima1('https://www.baidu.com');
      h7 r1 G( y5 h5 b
复制代码
3. 生成二维码(不生成图片文件)
8 E3 ]' R: k, U& y- O+ \
  1. //3. 生成原始的二维码(不生成图片文件)
    & S" I; V2 ]0 p
  2. function scerweima2($url=''){% ^1 n" [& e' @- P2 u. y
  3.   require_once 'phpqrcode.php';; x/ s" O6 J% A# h; E1 q
  4.   $value = $url;         //二维码内容7 J0 r* n9 Z% T/ r1 w5 y* V2 A
  5.   $errorCorrectionLevel = 'L';  //容错级别
    4 V) x" m# m9 N/ S  p
  6.   $matrixPointSize = 5;      //生成图片大小; B% E8 \6 C+ F# I! F& i7 }/ P2 i
  7.   //生成二维码图片2 G# Q8 e- _, z
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);+ v) Y% T+ [3 G: P' U0 t1 Z7 J
  9. }+ }1 H) }; [2 s5 Z; k% ]* L
  10. //调用查看结果
    & ]/ B; {# Q- m/ v
  11. scerweima2('https://www.baidu.com');2 P7 H  J' z9 f. T
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。  A" P6 k: Q+ ]
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
6 k; n$ M: I$ T! M- {* |2 F# q' P在线生成二维码工具(加强版)
# j. R& m. ^5 D( G- C* R4 }- c
http://tools.jb51.net/transcoding/jb51qrcode
' O% }- c' m4 f! d' i0 x5 H3 ~在线二维码解码识别工具# W3 D$ g6 f9 P- C5 ]
http://tools.jb51.net/transcoding/trans_qrcode8 s1 O. f2 d8 m) m, ?& L
2 @6 x) k! U3 B( b% D1 J
6 m' i( T2 l* @7 K

9 ?& G) X9 b6 d
3 d% R% `! U2 M, z  z5 p% a6 Z  ?% E' Y# C0 e* q5 O, H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 01:21 , Processed in 0.065990 second(s), 20 queries .

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