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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:3 U1 n' O! C+ r8 H1 K% \: p
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
. r# \4 K( r* `, k- b3 {4 [+ n前期准备:
2 ]4 q3 [7 {9 e& D1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
/ `9 A( T6 r/ ^, }+ j) t 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
% d) J5 V  n; m) Q7 w方法解读:
6 ^, T' o! x9 q+ Y0 y  w0 B下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
3 W2 E* _  N1 w% g( C$ B' m+ l+ o4 {
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    + B' j( s/ V- q% ]7 o4 a. X' T
  2. {% \8 B5 T  Y, m- `0 ?
  3.   $enc = QRencode::factory($level, $size, $margin);5 c. [* N: k6 s+ M5 w3 U
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    8 L8 V7 w; Y4 D
  5. }( x" l  h+ N4 I, ~) `$ L
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;' }/ w/ Y2 i4 P8 [4 K
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;2 ]: r, [4 ^+ b1 E& t  g. L
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
6 \3 w, ^/ h- P+ N 第4个参数$size:控制生成图片的大小,默认为4;
7 _" b% S8 M' Q1 B3 i, P% x 第5个参数$margin:控制生成二维码的空白区域大小;2 X+ t1 I% `- O+ q. K* x
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
; f4 N' S1 c; p( m% I  `使用示例:
' N. b0 B. z: ]& q) ?+ m( R5 f1 G1. 生成二维码(生成图片文件)
, I- e, @9 B7 a( Q1 V7 l2 m
  1. // 1. 生成原始的二维码(生成图片文件)$ ?4 D1 c% l% y) l6 h8 V, s1 h
  2. function scerweima($url=''){. Q1 |3 }  K. D6 T9 j6 @3 X% c
  3.   require_once 'phpqrcode.php';
    0 b7 S  u0 V# T4 W3 R
  4.   $value = $url;         //二维码内容3 {) ?; l" I( G2 w% m/ W; v' W2 S& P
  5.   $errorCorrectionLevel = 'L';  //容错级别
    3 y" q" [) ]8 @9 K' ^
  6.   $matrixPointSize = 5;      //生成图片大小8 r+ k) V+ u+ l) @) @) |5 }6 I
  7.   //生成二维码图片  W" c" ^* u8 Y% \' S+ n' e
  8.   $filename = 'qrcode/'.microtime().'.png';; M! _% F$ }' R$ T8 g. B' M9 y  t% U9 r
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);7 X6 ^' C9 B7 ~; J2 N0 _
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    ) M! I) U$ t& r% f
  11.   $QR = imagecreatefromstring(file_get_contents($QR));- f% M! ^& i: s- @6 E
  12.   //输出图片2 H; _1 _; p% o% e5 Z
  13.   imagepng($QR, 'qrcode.png');. B" j8 H1 V* D& U8 d' {
  14.   imagedestroy($QR);* ~& J3 z0 [; b- X# e1 C9 X2 F
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    / X- B& M1 U" Y" W6 s& u5 j
  16. }* b$ c+ Q8 U: Q& ]9 i
  17. //调用查看结果: d6 ^0 [- E% u# a! y) i# q# b- i
  18. echo scerweima('https://www.baidu.com');
    2 b6 g# q. H+ b6 L
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
' V7 q- J8 ]: G( k
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    $ }- X" ]2 E8 r# V6 x1 t
  2. function scerweima1($url=''){: c5 \  a& J& `
  3.   require_once 'phpqrcode.php';
    0 M0 `9 e/ }! \" f7 l' M- k% A, t
  4.   $value = $url;         //二维码内容7 n) |7 }, O- ?
  5.   $errorCorrectionLevel = 'H';  //容错级别7 M8 X4 H5 Q5 k$ L/ m1 K- [
  6.   $matrixPointSize = 6;      //生成图片大小0 J) e3 F% Z9 ~, C, K$ E  t
  7.   //生成二维码图片
    : h3 f0 K. ~; R
  8.   $filename = 'qrcode/'.microtime().'.png';
    6 R7 x$ k2 {: {# n
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    & F) R! c( ]" d' }
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    2 d. L! M5 W  |+ l. {8 p
  11.   $QR = $filename;      //已经生成的原始二维码图/ C( m* j' B* _+ @
  12.   if (file_exists($logo)) {
    ( v* x! t' u2 O# M  z3 L3 p
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    , F2 U" Q8 ^" V- q! i* g
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。+ H, A4 }# P1 o7 H3 z8 t; r" P6 \7 z
  15.     $QR_width = imagesx($QR);      //二维码图片宽度$ E8 O/ v4 J  c6 ]" W
  16.     $QR_height = imagesy($QR);     //二维码图片高度
      J8 u' v7 P$ ^
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    ' @- ^& d( w5 [% B1 `: }: S
  18.     $logo_height = imagesy($logo);   //logo图片高度
    / W9 |" G" D8 U( ~
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)4 @4 Q- ]) x: v3 ?
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    0 ?* E, \% a" B4 L0 T
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度9 [4 c% p" e; U; u5 }
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点% D% z; h9 Z# |2 W8 y5 n2 z
  23.     //重新组合图片并调整大小
    ) ^5 k5 n: d7 f/ d0 }. N
  24.     /*# n+ X7 L( B6 w% ]8 x
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    ; ]* X  C5 z% V2 ?. k/ }7 c
  26.      */
    9 |; W. q) O( Y: s3 c
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);$ D  E5 J$ e! K
  28.   }
    0 A/ d7 I% u$ E: w
  29.   //输出图片' y3 |$ m3 C0 u# ]4 E, N; ^, o
  30.   imagepng($QR, 'qrcode.png');
    ' B0 ], K  e# {7 T) d1 w$ M
  31.   imagedestroy($QR);- N( s' }( p! H8 Z$ G& C
  32.   imagedestroy($logo);% D  ?6 {0 J% p* w
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';% g/ G+ e2 v& t9 p( U
  34. }: T, A# w& d; `2 H
  35. //调用查看结果5 `4 E! z" g1 i) X
  36. echo scerweima1('https://www.baidu.com');8 U0 S" |$ n. @4 P& o$ }: [
复制代码
3. 生成二维码(不生成图片文件)
) D1 ~. A6 N; u; b' O" p5 j$ N! J
  1. //3. 生成原始的二维码(不生成图片文件)" C, S/ L5 S/ X6 v- E- Z9 ~
  2. function scerweima2($url=''){# ?6 W1 @: t. a, Q
  3.   require_once 'phpqrcode.php';
    ( ^2 e; X; G  ~% Z4 c; ~' y+ T- e
  4.   $value = $url;         //二维码内容; D1 r1 h4 ~$ n- N9 ]$ W
  5.   $errorCorrectionLevel = 'L';  //容错级别
    & Y& c( g/ H6 `# m
  6.   $matrixPointSize = 5;      //生成图片大小6 N( N7 p+ s8 W/ Z( F# ^
  7.   //生成二维码图片( f& \. S7 q0 H* F
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);9 w9 u: j7 F, _' J& T, P
  9. }- |/ r+ M: h' P" F) J: ]) w
  10. //调用查看结果( b1 j8 b/ q; n/ R. c8 W$ q
  11. scerweima2('https://www.baidu.com');; {0 }$ [* P5 }! p1 X* Y
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
, j9 y# d+ [5 o+ B6 D  @PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:- O7 [: m4 l; `" ~
在线生成二维码工具(加强版)5 Q6 u' A6 y+ `4 F+ z
http://tools.jb51.net/transcoding/jb51qrcode) h  @6 H! \/ V/ \: z1 V4 c7 h
在线二维码解码识别工具
6 e0 O4 B) k/ d' J; h  I% k
http://tools.jb51.net/transcoding/trans_qrcode
9 E3 [/ ], `' [# C
( {$ |& t; n. q$ n% C' C% `
, T) ^3 N# f; W( V& S
" ^% F- U; y- o- \. ^, X1 @# K
" @) A. S8 N2 v  Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2025-2-5 19:51 , Processed in 0.107832 second(s), 19 queries .

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