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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

PHP基于phpqrcode类生成二维码的方法详解

发布者: admin | 发布时间: 2020-7-20 21:02| 查看数: 15035| 评论数: 0|帖子模式

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:9 S$ F, i& _3 q% H2 T5 F5 ]5 }
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
; K& c* I0 g3 e; y. [! w前期准备:
: V9 g# ~$ _. V* F3 W7 f5 W7 q1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
6 x& M6 K' C; x: \9 Z  V 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)6 u% ]# k$ j- i1 K- t
方法解读:
9 _& Q6 f" a9 X! q6 K2 G下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):$ t+ _& N, u* J- R: U: h
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    1 J! I9 q$ Q$ p' n9 Q$ d
  2. {: `9 W6 m2 V, |1 t( R
  3.   $enc = QRencode::factory($level, $size, $margin);2 z7 l* N/ ^, H6 K/ N. @. O( {
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);% D' G: b8 C; ]8 v% h8 X
  5. }
    ' a9 z5 D5 A& D
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
: i+ Q8 `0 n% w9 _3 O. Z7 W 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
7 g% V/ J* D$ H! F9 g 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;3 R0 V1 g& E+ G0 B
第4个参数$size:控制生成图片的大小,默认为4;
" Y8 U+ ]0 P+ V# G3 ? 第5个参数$margin:控制生成二维码的空白区域大小;
5 Q8 i( b3 i) t& o8 T: ~4 h' s 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
" n: B1 \2 [$ Q$ J# ]* z使用示例:
6 u( u; @) v1 ~3 u: [1. 生成二维码(生成图片文件)
) W7 D- P8 K- E  L
  1. // 1. 生成原始的二维码(生成图片文件)( I& R: S/ p4 f8 p( [. q/ w7 s
  2. function scerweima($url=''){  c% S1 W+ C( l" k) z
  3.   require_once 'phpqrcode.php';
    5 C2 s5 T  O2 I3 D0 a
  4.   $value = $url;         //二维码内容  ~2 v5 |. G2 E" u+ d" E
  5.   $errorCorrectionLevel = 'L';  //容错级别
    * j( O2 ^+ h# W/ Y
  6.   $matrixPointSize = 5;      //生成图片大小$ v3 g2 X3 o: u9 R" S1 @4 p+ w8 K
  7.   //生成二维码图片$ ]' |. k1 ^- I' T4 o
  8.   $filename = 'qrcode/'.microtime().'.png';
    6 g+ a4 z; h( V2 q
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    6 m- _- E2 v1 _
  10.   $QR = $filename;        //已经生成的原始二维码图片文件9 ~6 E& _& S) r1 V" M
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    & c9 ]# i3 X! }2 ~% v
  12.   //输出图片& F& y! {0 Q' z" Y. H. _
  13.   imagepng($QR, 'qrcode.png');* x" a. j1 I7 ?  I6 E7 z3 D
  14.   imagedestroy($QR);
    1 s7 e& Y4 o0 }" M0 N
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    ( H: Q  h% Q; _6 i0 q
  16. }: r* [7 k0 B+ O( R* x
  17. //调用查看结果" R3 G% i$ F) I1 Q6 r
  18. echo scerweima('https://www.baidu.com');$ F$ J( N5 x& g8 G  k, G) B  K
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
! ~( s! L6 X  ~- ~- l0 H3 y; Q
  1. //2. 在生成的二维码中加上logo(生成图片文件)2 ?" w3 {+ p! C$ r' ~+ H& A
  2. function scerweima1($url=''){
    : m" k  N' o# g' y3 F
  3.   require_once 'phpqrcode.php';
    6 m; D1 E) I$ A
  4.   $value = $url;         //二维码内容' `6 B% f6 J9 c" ^9 O) n5 m% @
  5.   $errorCorrectionLevel = 'H';  //容错级别5 t/ O0 S2 j8 a0 u$ y- J8 r  o5 u- p3 g
  6.   $matrixPointSize = 6;      //生成图片大小
    5 u+ B  e6 A$ w. @& q  W. c7 M
  7.   //生成二维码图片
    ' X3 E# g/ m& g" O+ j9 o
  8.   $filename = 'qrcode/'.microtime().'.png';4 \/ {4 ^* g0 U
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    : k/ y1 ?0 F, ^; q5 M/ |& a
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片/ W1 @& z( h1 G- h
  11.   $QR = $filename;      //已经生成的原始二维码图
    % W( }1 O# z8 l4 @/ {# ~1 X6 a
  12.   if (file_exists($logo)) {
    ; {) P* ~& P% o1 r- Q2 A
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。2 y! B* ]1 y8 i" P
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    5 k8 f/ o7 c# V/ C* `9 ]1 e9 i
  15.     $QR_width = imagesx($QR);      //二维码图片宽度+ B5 H) C! N: x; A8 t, P+ F! d
  16.     $QR_height = imagesy($QR);     //二维码图片高度3 N0 ?# C7 q, y
  17.     $logo_width = imagesx($logo);    //logo图片宽度' q$ }0 {9 B5 i7 h* o9 A1 S: w
  18.     $logo_height = imagesy($logo);   //logo图片高度
    - o& B7 Y; Q3 P+ ~5 c  k  ~
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)' L9 ~+ A. f6 {# x, v9 j2 _
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    / C9 d* q  J5 r9 Z5 b
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度0 Q+ N* k2 E% w7 C
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    & {( p: J1 Z3 Q
  23.     //重新组合图片并调整大小+ U1 q3 {3 o. j2 Z5 y
  24.     /*" W3 C9 q% x& a% j
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中0 q# z& S8 p. Y5 ~
  26.      */$ T4 Y7 H! B! H6 _* z8 m* ~0 `
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);" G4 G8 V. N# c- \" r
  28.   }
    : L4 s: E3 f0 l' T' }% |
  29.   //输出图片% K8 D, ]6 N8 |6 K+ y8 w
  30.   imagepng($QR, 'qrcode.png');. U1 g6 K/ B; U$ Q5 R
  31.   imagedestroy($QR);
    6 _" P  ?. W, t' m
  32.   imagedestroy($logo);
      [/ ?  ]1 b4 ^# r) X, b$ |0 \' e3 E
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    + h+ M% v7 ?2 t9 N8 s/ j7 \  D
  34. }3 ^& x( Q, B5 P% I
  35. //调用查看结果
    , _; r- m" w2 _* O" g
  36. echo scerweima1('https://www.baidu.com');
    8 r/ w" ]0 E5 c5 V1 _
复制代码
3. 生成二维码(不生成图片文件)
- n# S+ I) S) n  D2 H, M+ \
  1. //3. 生成原始的二维码(不生成图片文件)
      N9 Q/ S0 a/ X; h, g% P
  2. function scerweima2($url=''){7 i- ]9 Q. X: A/ J$ ]8 o
  3.   require_once 'phpqrcode.php';
    " v: j$ }. l9 ^& j$ |: I
  4.   $value = $url;         //二维码内容
    5 P( `$ o5 Q$ O3 \; S- n0 j0 J
  5.   $errorCorrectionLevel = 'L';  //容错级别. N' E  ?5 r& A' C/ |5 u6 `
  6.   $matrixPointSize = 5;      //生成图片大小. T3 D2 |2 U5 A
  7.   //生成二维码图片
    # {' o7 w2 T  Z, q/ I" q
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);2 m- M4 U5 m9 }
  9. }
    " i0 y+ k" F# ?' v" D. j
  10. //调用查看结果
    , L) R0 T$ k1 x% V* `
  11. scerweima2('https://www.baidu.com');- f) q: }" O' J- ]; L: S( N  G
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。& }, r- k0 i/ O) M; `2 s: U
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:9 G! E  [6 E  M0 F
在线生成二维码工具(加强版)
5 S% j1 r, K- X/ L" O& z' r
http://tools.jb51.net/transcoding/jb51qrcode9 w* o; M8 \$ E+ l" m4 T+ {4 |
在线二维码解码识别工具
- N' x! S2 X5 O
http://tools.jb51.net/transcoding/trans_qrcode
* j4 H0 m  q& i) v
0 J' \% N/ `5 \+ p7 f3 j* x8 m/ E' [9 m8 Q/ Z

9 K! V9 w% n8 h7 B
7 q6 v; o2 P* A- i4 \2 `! B! M  U% Y8 n( Z  j( U3 E. {3 l

最新评论

GMT+8, 2026-5-16 01:23 , Processed in 0.066113 second(s), 22 queries .

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