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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
9 q4 R1 k& H+ n$ _4 ^3 L8 c使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
$ n" m( {( \+ D5 f: E前期准备:) z7 z' ~% Z3 l
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
1 \, W9 ^! M6 }( s4 r& G+ H  H 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
7 |1 E% M) l/ Z方法解读:3 s( {; {! `1 P; v
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
* i- j; ?' _, m- g4 f" U
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    6 }6 |$ R. P5 q; n/ W- c2 K( D
  2. {
    4 o3 E, K2 e( T
  3.   $enc = QRencode::factory($level, $size, $margin);% g1 Y6 u7 p5 k
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);, q2 i9 d5 W. z# I) F( g* x  p
  5. }
    - j% q* Q6 \  a; V8 y0 P/ q: A4 t
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;1 }6 e; _* `, a7 U
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
2 k( B2 [+ E. k/ m 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
$ B& k( H  q- [7 z, I 第4个参数$size:控制生成图片的大小,默认为4;
5 a% F. n& t% J+ W4 f  F0 U  H/ I; i 第5个参数$margin:控制生成二维码的空白区域大小;
( F" h7 T- z( X- Y; h+ [6 c 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
& g% O1 {+ }0 p. e* h! x: ^: j使用示例:: }: H/ @0 u2 c* z* C1 W
1. 生成二维码(生成图片文件)8 i5 g7 W0 W3 Z3 M+ B4 E
  1. // 1. 生成原始的二维码(生成图片文件)
    1 G2 k8 B* `* E5 h9 @$ X
  2. function scerweima($url=''){) \9 t) n- h1 B3 J, N* K
  3.   require_once 'phpqrcode.php';' d# W4 ?6 ?7 }8 [$ v8 T5 R" Y
  4.   $value = $url;         //二维码内容
    $ ~1 e5 d. _. @# ~  }) y: s  m" A
  5.   $errorCorrectionLevel = 'L';  //容错级别
    7 p+ W% v* Y  `+ h* O: n: C, U
  6.   $matrixPointSize = 5;      //生成图片大小- z5 n' o! S1 I
  7.   //生成二维码图片3 C% @5 `+ o) A! U! D3 V
  8.   $filename = 'qrcode/'.microtime().'.png';
    ( D7 j1 y! ^4 R8 N0 |; Y# M
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    3 r+ J' @, Q. y& F8 L  g
  10.   $QR = $filename;        //已经生成的原始二维码图片文件3 {8 @) g4 t' e
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    ; {: l1 z+ v/ [+ v$ q0 I& `
  12.   //输出图片- `* x( b. ?# o- T
  13.   imagepng($QR, 'qrcode.png');
    , X5 i; F7 r! R' p
  14.   imagedestroy($QR);& \  Q+ o0 {6 w
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';7 O1 B( f7 o7 B& I$ u/ o* g
  16. }
    ) z- I- s" W4 T8 b3 D$ k" l; `
  17. //调用查看结果
    . V. k+ i, i4 t: |6 R5 |
  18. echo scerweima('https://www.baidu.com');3 X- O# _! r) E9 |6 ]
复制代码
2. 在生成的二维码中加上logo(生成图片文件)! m, z5 l; y: j  M
  1. //2. 在生成的二维码中加上logo(生成图片文件)0 y) d, Q9 ~. u. I' \+ I
  2. function scerweima1($url=''){. v  k8 r6 z: V) h
  3.   require_once 'phpqrcode.php';
    2 A( h) C# {5 [% c# x
  4.   $value = $url;         //二维码内容
    - o% l8 ]. B' W" X2 _# d" _
  5.   $errorCorrectionLevel = 'H';  //容错级别
    - \! W/ ~+ Q& S5 `" ?, U, m2 D
  6.   $matrixPointSize = 6;      //生成图片大小
    % [, T3 |8 P& [. W. W4 e" p! ?
  7.   //生成二维码图片1 ~0 X/ s; C# n; m+ f$ _
  8.   $filename = 'qrcode/'.microtime().'.png';
    " h; j) @& Z1 ~$ H' \5 P
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);( Y4 y1 `4 Y* m6 @2 |9 [  t
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    & e- ^6 T  {6 Q
  11.   $QR = $filename;      //已经生成的原始二维码图9 X5 y- V# q( {1 A7 M# ~( b- X" W' E
  12.   if (file_exists($logo)) {
    3 j% D: J* U0 T' n
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。0 B+ ~! f% f- i0 f& M+ K
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。3 }& p/ z$ M6 z+ s- Y7 g. ~
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    . w1 m3 R% K& W- z# F: X- N5 I
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    $ d  Y* q9 o5 t
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    ) R; G; m  t  F' H3 i4 t- g. a
  18.     $logo_height = imagesy($logo);   //logo图片高度. V9 n7 f- s% F- O3 D
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    6 E1 T0 e) T, \( S
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)4 t& r/ Z2 g3 p" `
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
      y& j; e/ r& r  V" d* n
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点. x* H) i* o( X# c* I4 B8 I
  23.     //重新组合图片并调整大小/ B" B/ a( R/ U$ x  M; O* S$ Z
  24.     /*
    $ ^. @* @' j5 \; q6 z6 g
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    6 E! n  E8 y: k( u, w8 `7 v: J
  26.      */$ D1 r$ R. R# H: q. O" _8 @. h) t
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);. Y% F8 A- P, R: n' Y5 y/ T
  28.   }
    * V3 [* G1 @* h) i
  29.   //输出图片4 {& j5 Y' A3 W: n1 u$ ^8 N
  30.   imagepng($QR, 'qrcode.png');6 |3 ?% C1 v" X7 f$ `0 M! c
  31.   imagedestroy($QR);
    6 k5 c9 y! Y: `; b" `2 G5 {
  32.   imagedestroy($logo);9 I, i0 B: q# s/ j( H5 I5 _! k7 x
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    1 R+ W# f( w2 |" a6 r# b
  34. }2 ~" A: m) R. w/ {
  35. //调用查看结果
    6 V% o) L; Q# P
  36. echo scerweima1('https://www.baidu.com');% w2 E3 o2 w; e1 W! c/ d- I( \- H# D
复制代码
3. 生成二维码(不生成图片文件)8 b% L6 r5 s8 \; m
  1. //3. 生成原始的二维码(不生成图片文件)
    ; P% @2 d. R2 Y4 T  G# C" Q: ]. P
  2. function scerweima2($url=''){
    ' m0 M0 {0 x+ `& \0 G% r
  3.   require_once 'phpqrcode.php';! y0 x4 m: \# G7 M
  4.   $value = $url;         //二维码内容
    # }2 F  j# R5 K" k  {- e
  5.   $errorCorrectionLevel = 'L';  //容错级别
    ' w6 C" Z8 W1 ]: X) k) N7 e* m! f! Q
  6.   $matrixPointSize = 5;      //生成图片大小% n1 x3 ]8 n" H% P5 I
  7.   //生成二维码图片
    3 T- K# Y* M" e, y2 x' A
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);$ `& C1 Y- h  ^$ N- d6 N5 A6 W
  9. }
    ' E0 `/ l7 u! Z9 R1 |! S7 B
  10. //调用查看结果
    % L9 I- m% C( R( ^% d4 F$ z
  11. scerweima2('https://www.baidu.com');8 z$ G% o; R' w0 ^, o# A6 x9 L' r
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
9 C, l7 v5 v. A  @3 r  aPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
/ |8 }6 d) F: t& ?在线生成二维码工具(加强版)
  g# @/ X* W( I5 H) Q# u
http://tools.jb51.net/transcoding/jb51qrcode$ |+ g( ?- }/ G) f  f" P' Z- a
在线二维码解码识别工具
. K1 p' n7 V1 l' y- M
http://tools.jb51.net/transcoding/trans_qrcode
. M' d7 Y$ \( t9 |0 X) R! D7 G1 A3 |1 ?- _5 o$ \# r
! |4 H9 E( z- J# L' O1 L- @
) q# @. A$ [1 M
4 l4 \7 n* T$ _* ~) T

; H$ Q( V; L1 \* u4 l+ V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:31 , Processed in 0.079434 second(s), 19 queries .

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