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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

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

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

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:  u% Q1 m! l% n$ I( g# X
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
/ ^, l2 F/ j, ]( x前期准备:
& `5 X' X8 Y5 x2 @1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
& `$ W6 G+ W3 b3 e$ |) n 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)7 h6 l; Y% Q4 u, t4 L4 C8 R! A& G
方法解读:
+ i! \. Q( b; t8 j! E/ b9 [0 x下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):5 N4 U1 B( m% @7 ?5 E$ S) x2 D! g
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    2 q# \) {: m) y" T- q% v" ~
  2. {8 }4 ]& p* p6 G8 G4 i! x
  3.   $enc = QRencode::factory($level, $size, $margin);
    : G! ~  G) _: Q& U! z3 y1 [
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    0 R# E5 R- n% Z3 J% g
  5. }
    ( l+ I( A9 h: Y- W9 Y
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
& |  X) y8 d' v& I3 r2 [ 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;% K1 n% B0 L( K7 [0 u6 f
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;6 I/ X* Z+ v) @5 l% W
第4个参数$size:控制生成图片的大小,默认为4;; P" V. C3 ]5 q5 u- e" G  E
第5个参数$margin:控制生成二维码的空白区域大小;
) ]: R2 R9 W# v 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;  s; _6 ?6 m" o# [
使用示例:" @7 z/ m% [6 P, d
1. 生成二维码(生成图片文件)
( r! F* p2 b/ A/ r  [$ C& J& Q: @
  1. // 1. 生成原始的二维码(生成图片文件)
    - V. I2 F$ L% z- ~  U
  2. function scerweima($url=''){" ~8 G$ @9 W6 A. d: S
  3.   require_once 'phpqrcode.php';
    5 f+ b1 C6 s8 e4 T8 ?
  4.   $value = $url;         //二维码内容) x  B: q+ r0 N
  5.   $errorCorrectionLevel = 'L';  //容错级别
    - H8 r6 I- c. n, }5 _
  6.   $matrixPointSize = 5;      //生成图片大小, [6 K5 t- v0 e: `
  7.   //生成二维码图片* H: F3 [6 o& Q" C1 G( B
  8.   $filename = 'qrcode/'.microtime().'.png';
    . D' v. v; h2 U* x* d
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);) B* |6 t) G: W6 y1 S
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    % U* I. a: T9 b& M1 o& [
  11.   $QR = imagecreatefromstring(file_get_contents($QR));- X+ w% V  N+ t# V
  12.   //输出图片
    ; O  A0 D- p1 U3 {9 Y! h: V
  13.   imagepng($QR, 'qrcode.png');
    8 D) L9 ]4 V( ^( b9 w
  14.   imagedestroy($QR);" Z0 [# v' z  ~
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';+ J% q3 N3 ~1 s
  16. }, M" e5 M& A4 G0 D) f+ y+ G/ O1 h
  17. //调用查看结果
    ; ~* k; n$ `7 z) r6 u
  18. echo scerweima('https://www.baidu.com');) K" S1 c; v% N- j. G" P
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
7 c( v0 O' P, _' N( {1 o& B! M1 }9 D8 g
  1. //2. 在生成的二维码中加上logo(生成图片文件)" R8 U& Z- `" t: x: A$ M, \
  2. function scerweima1($url=''){
    / I, R. I# F$ K; _  Z. V
  3.   require_once 'phpqrcode.php';# S7 z8 ^* i, x2 I6 e  h2 y% y* o5 C
  4.   $value = $url;         //二维码内容
    # E/ Q% |. P- w  h$ A2 y
  5.   $errorCorrectionLevel = 'H';  //容错级别9 @8 h# Y3 p* q+ q$ X8 D& }2 I
  6.   $matrixPointSize = 6;      //生成图片大小
    & c$ ?* R# C' H6 T7 @
  7.   //生成二维码图片4 P2 Y7 c- ]$ M. O8 G' B! S5 o
  8.   $filename = 'qrcode/'.microtime().'.png';
    / H" _# Z1 v8 _. }8 ~' i
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    - c) h6 \6 ^* Q7 I: E
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片" c) ?8 p4 s8 b/ ~
  11.   $QR = $filename;      //已经生成的原始二维码图% C3 l( ]7 \( S" E+ h
  12.   if (file_exists($logo)) {
    9 }! \- ~' i$ [1 k/ y
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    6 L% W# J$ x& S% k
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    1 O/ z: S( N% X5 X
  15.     $QR_width = imagesx($QR);      //二维码图片宽度1 |) Y, o# [) a; J
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    % T0 z6 g: i& \) H
  17.     $logo_width = imagesx($logo);    //logo图片宽度) e+ k) H6 t3 f9 x0 r; I1 {; s/ o  ~
  18.     $logo_height = imagesy($logo);   //logo图片高度  d% h% x7 s' k* R6 d
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)$ J$ M1 R8 }8 D  @- d
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    3 h  B, F- j$ l7 x( v
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    ( b2 f( O" w! d+ w+ t
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    4 l# Q% P) y) u7 g& g8 m, [! g
  23.     //重新组合图片并调整大小
    ) e; ]; Y4 I) w6 D9 A+ W% [
  24.     /*
    2 g( M; G- r0 Q8 j. E
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中' H+ q* r, z5 V$ F9 i3 g
  26.      */4 U/ t$ z5 W, K3 {9 [3 A
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    ) v4 S! Z+ D1 M% Y. f  j
  28.   }4 G; |% L, E2 U9 ~% b$ [2 ~/ I
  29.   //输出图片
    * s+ U. v# E$ T- ]; D$ o  M$ s
  30.   imagepng($QR, 'qrcode.png');
    . @! Q8 u! R, O* q1 _
  31.   imagedestroy($QR);
    + e4 k2 E5 V# m! I2 z5 f
  32.   imagedestroy($logo);; N+ r/ d! f6 [4 o4 g- t
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    7 O2 h8 a6 B% I/ D) R( @
  34. }6 h5 p* s) U  x- C1 S' }
  35. //调用查看结果( S; `% P& |8 g" B
  36. echo scerweima1('https://www.baidu.com');! [6 r3 `; @. T' O2 V/ v) `7 ?
复制代码
3. 生成二维码(不生成图片文件)3 `' v" y9 Z0 H; b; }2 S
  1. //3. 生成原始的二维码(不生成图片文件)
    1 l& H( `  m5 V' T
  2. function scerweima2($url=''){
    . y( b& y4 `$ D& Z
  3.   require_once 'phpqrcode.php';
    " C( `/ Y- v5 G+ C0 M
  4.   $value = $url;         //二维码内容
    / [; j( U1 G' h' T
  5.   $errorCorrectionLevel = 'L';  //容错级别
    4 b5 l3 [- F3 Q- h# [+ E, a
  6.   $matrixPointSize = 5;      //生成图片大小. j, }* x2 ^4 W" [
  7.   //生成二维码图片
    * |$ {1 v- r! t
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);7 [/ {5 n8 ?3 U
  9. }+ `; O7 M6 _' w- f
  10. //调用查看结果
    * O& f" t9 P: N# [
  11. scerweima2('https://www.baidu.com');
    " o: \% S$ B' }  x0 F* e  _
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
/ m- `6 `+ }! E0 ZPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
9 i& k2 U+ ]' q* w/ ]+ I/ \+ ~在线生成二维码工具(加强版)
6 G9 D& l: S: M2 o( d) X- Y
http://tools.jb51.net/transcoding/jb51qrcode6 T. s5 y) @8 O2 ^. ?, a8 L1 A
在线二维码解码识别工具" }+ F% {& ?9 d' n& Z
http://tools.jb51.net/transcoding/trans_qrcode  I- [; s; g( u" n$ n/ C0 H
. Y: g5 {2 H! h  @& [

" i' X1 ~! C3 Z: p* N# w7 u. U5 l; p0 {$ ]

  L) q6 w* p- e! J, g( D- g& m) k3 x- N

最新评论

浏览过的版块

GMT+8, 2026-8-5 01:12 , Processed in 0.044398 second(s), 19 queries .

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