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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
+ ?# i3 D# g: n" @) ~% p使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
. I% v( T! z. Z" I$ T+ K3 v& q前期准备:& R3 A8 {& [. C4 J! R: K* v0 m
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/; \( c! f) S5 Y2 ?% M' e/ N' \
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态). e: E9 i. O& ^5 b# O# o
方法解读:( H" A! m& ?  j7 V# T4 K
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
9 @: L: C# M: k/ I; e- Y1 P
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    0 Q! J7 ]: i  w
  2. {1 A/ d! Q8 S3 a3 f- z2 d2 [# x
  3.   $enc = QRencode::factory($level, $size, $margin);! G* ~: L2 Z7 y" S4 g( @) G  \8 p
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);" @; a: m/ c( P1 p8 s; H
  5. }3 A4 G7 u' }# F+ ?) e, l
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
7 o  C+ t' }( o/ B! O+ ~; I# { 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
6 J" F" p9 Q$ n; U3 V2 j5 D  j 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
- d2 j: G0 W* H: ~. V2 y 第4个参数$size:控制生成图片的大小,默认为4;/ e  w  p" U# E) N+ t: ~' F
第5个参数$margin:控制生成二维码的空白区域大小;6 _% B' A# \0 B3 ~/ j! g1 t4 p
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;2 x) [' J! m7 f2 G4 H/ I( w/ y
使用示例:0 g' J( n5 ~  U6 B0 p
1. 生成二维码(生成图片文件)
$ n) b: i* Z# g. u  _
  1. // 1. 生成原始的二维码(生成图片文件)4 J; t: f" @2 W6 k# F6 d4 w
  2. function scerweima($url=''){7 ?9 R4 L! l( V3 v' U* F
  3.   require_once 'phpqrcode.php';. b' w8 m" u2 ]# u% Q
  4.   $value = $url;         //二维码内容
    - @+ f. n* Y+ V. z) F
  5.   $errorCorrectionLevel = 'L';  //容错级别: w4 ^; R5 A4 g6 _  [% f3 x* c( O
  6.   $matrixPointSize = 5;      //生成图片大小
      t: Y  v* Z, |5 l& X, M
  7.   //生成二维码图片
    : [% q" U5 b% {- q; [
  8.   $filename = 'qrcode/'.microtime().'.png';* n# o( I! B# o- C
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    8 @/ N3 s1 M, O3 Y2 R: w- W5 t
  10.   $QR = $filename;        //已经生成的原始二维码图片文件, ~$ y1 N; B( s2 ?' P3 U  K- f# I( |
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    , N! e8 T  Z+ b! j
  12.   //输出图片4 g/ [; g. N9 B$ I
  13.   imagepng($QR, 'qrcode.png');
    * _% i- p/ I/ O! R& |
  14.   imagedestroy($QR);5 r. C' s# i$ I9 f. J
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';) m" w/ S, u' K: ~; X$ v
  16. }
    + r! g8 k) B5 b$ _# U4 S+ ^- V
  17. //调用查看结果
    . `+ ]: S% e: A" P
  18. echo scerweima('https://www.baidu.com');4 {- K  ?7 b$ j  X
复制代码
2. 在生成的二维码中加上logo(生成图片文件)4 U/ Z# q4 f) C+ _. j2 t& X
  1. //2. 在生成的二维码中加上logo(生成图片文件)3 }6 b0 x$ t# G2 U
  2. function scerweima1($url=''){
    6 b# v6 W  o1 Y+ Q
  3.   require_once 'phpqrcode.php';
    / c7 I: q" e& B1 I) o. W( J* T5 D
  4.   $value = $url;         //二维码内容2 p8 s6 k0 Q- H# \0 H* N3 u
  5.   $errorCorrectionLevel = 'H';  //容错级别
    1 M8 }- [" F0 |+ e3 y# F0 W
  6.   $matrixPointSize = 6;      //生成图片大小+ w9 g( u4 ]$ |* Y% {$ r- X
  7.   //生成二维码图片
    & z" b8 {: H8 N, I. \
  8.   $filename = 'qrcode/'.microtime().'.png';+ x1 c/ l* ]5 a  L6 M3 V
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);+ Y9 F1 t( e$ u4 R- X2 \
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    , a. D; Y! J# y: \
  11.   $QR = $filename;      //已经生成的原始二维码图
    - ~) t- D' I! l7 O5 S! F9 l
  12.   if (file_exists($logo)) {
    " T2 `# j1 m8 c* `3 a6 m
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。6 s" V2 |- P8 ~$ t
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。; D" r$ T9 F5 P9 W
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    ; W8 l0 M- P! z4 }! d1 `
  16.     $QR_height = imagesy($QR);     //二维码图片高度% p; b5 K% @8 Y. v0 k
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    ( I) }' @2 R9 g
  18.     $logo_height = imagesy($logo);   //logo图片高度
    2 E7 w% r' i/ t8 a/ G3 X
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)  R; D7 B) ]& I
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)1 z6 F, j8 j, ]. o
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度) e$ X; z. _, T. @! p; `
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点+ s$ ^# x8 c  I, F7 W0 g1 ?' s
  23.     //重新组合图片并调整大小
    % z0 \3 O) U$ X+ ?! I3 \& u
  24.     /*) m& h( D5 A6 b0 l1 x- P! K
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
      c, p# s, N' a. S7 G+ N
  26.      */& K1 `# Y; G% I/ N! G7 t
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);5 F# M8 d% q: @& v4 U' h+ g
  28.   }
    + N2 }  b+ r# u$ ~
  29.   //输出图片
    & T1 M9 J$ ]) L- C0 G8 e
  30.   imagepng($QR, 'qrcode.png');
      F5 G( q! p. {: H& L+ e
  31.   imagedestroy($QR);
    - k7 K: A" C$ H- r, U! R$ X
  32.   imagedestroy($logo);/ T. n5 \) U6 r+ E4 C! j1 y: x' H
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    ! L5 ~: r! h% E) ]: F
  34. }
    ! U# X+ Z; \+ a
  35. //调用查看结果  C# d! l" p$ ]& @
  36. echo scerweima1('https://www.baidu.com');
    8 K9 s$ w! P7 z& A) E6 u
复制代码
3. 生成二维码(不生成图片文件)' |: v# A* z  j, z9 _! G
  1. //3. 生成原始的二维码(不生成图片文件)" M( r9 u, I9 x- O6 n! H
  2. function scerweima2($url=''){
    / o4 U. Z7 @5 ~+ X( w+ v
  3.   require_once 'phpqrcode.php';4 n6 V  t5 q1 D; u% F
  4.   $value = $url;         //二维码内容" a! U0 }& U. r& L' O
  5.   $errorCorrectionLevel = 'L';  //容错级别! J& p/ M" E# }  x' o6 Y
  6.   $matrixPointSize = 5;      //生成图片大小) r4 i* E3 b" B* O$ g3 A! K( j
  7.   //生成二维码图片: Q% z2 s8 g, q* w1 i: ?* x) D
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);8 ^6 y$ O: @- g4 K* K5 U+ q
  9. }  j4 M5 n% r7 U  R( G
  10. //调用查看结果8 t- p- E" W) h6 X
  11. scerweima2('https://www.baidu.com');
    4 q% w0 h; l0 g; b" V" L0 Y/ h% a
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。6 e  d+ z' m& [8 ?2 k
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:+ I* y) L3 C- g8 \. @
在线生成二维码工具(加强版)
& V! b8 @7 V" ~9 p
http://tools.jb51.net/transcoding/jb51qrcode$ V- ?; P: z1 d+ `3 S, p6 J4 H
在线二维码解码识别工具
4 ?" J$ H; k: U  G5 v& ?$ o% N8 s( ~3 D
http://tools.jb51.net/transcoding/trans_qrcode
7 K3 G( J4 ~: g% m+ |0 D
: W& Y4 A( S6 n- m* {- v' F2 J6 k8 G
" o; [( ^# c2 q4 h( i( e. z# N
7 E/ ]9 D$ B, x- f0 V! h$ n: A5 ^5 L6 \

) w" y4 G, T" _1 x4 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 03:15 , Processed in 0.055466 second(s), 20 queries .

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