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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

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

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

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
6 z. `8 r2 a6 y3 Q  w, l使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。6 C$ C" s/ w4 V1 ?
前期准备:6 W' T# T. ]4 |; b$ x, Q# P
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/$ M: L9 j/ {) ]3 R
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
, F0 ^8 s1 ~. g方法解读:
( q7 `! Q( {4 h: o: @下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):2 J$ U' a) v) [- G' ]# h
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    1 J/ n, i# s% K6 }* d
  2. {, y4 q& u. T$ E
  3.   $enc = QRencode::factory($level, $size, $margin);( |1 O- W: u) T: C$ p1 J
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);. I. a8 C6 U  r1 I: c3 z
  5. }3 a- X. y! L8 @" B  U8 E6 s
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
( F, V, R1 j, q' Y 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;) w% q. y+ I' g0 D+ ]  _
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
' E' K: o( Y! X: D& q# g 第4个参数$size:控制生成图片的大小,默认为4;+ Z% e; O0 A: {2 d. V( s
第5个参数$margin:控制生成二维码的空白区域大小;
/ q# k2 ?" Z! F0 k' z1 i! l 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
/ `9 M/ Z- [4 ~1 d: N9 X5 w/ }使用示例:
, O3 h/ U& a0 B, h0 X0 y- w7 M0 g1. 生成二维码(生成图片文件)
% K+ l' l% `# [0 ?' E# v  D3 Z" ]
  1. // 1. 生成原始的二维码(生成图片文件)+ u0 P2 W$ |& i9 j
  2. function scerweima($url=''){) e1 K: g+ T5 c. X( Q
  3.   require_once 'phpqrcode.php';
    / L' E% {$ q$ t
  4.   $value = $url;         //二维码内容% I  V1 [" L; K8 w% e9 J% Q* U
  5.   $errorCorrectionLevel = 'L';  //容错级别0 N3 C5 f2 C" j, h: d
  6.   $matrixPointSize = 5;      //生成图片大小
    , I; H) z$ s( s
  7.   //生成二维码图片3 K/ I- r- t1 J1 Q, `8 q& {* p* n5 `
  8.   $filename = 'qrcode/'.microtime().'.png';- C$ [% @' C- H: o' ?: t
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);" J+ [% ~# r& E* F
  10.   $QR = $filename;        //已经生成的原始二维码图片文件4 f- f) \: F7 e9 |( M  u* g/ `: ~( m
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    ! C; d5 R4 u& p) l
  12.   //输出图片
    & B; t7 O( }! ]! [  q
  13.   imagepng($QR, 'qrcode.png');
    1 H7 U8 ]3 v. S9 }: _4 H
  14.   imagedestroy($QR);) H( U8 M8 _" z: V7 Y' m5 a5 M% r
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    , _' B# n' O# B0 F. ^- Q0 t/ o
  16. }
    ; Q, k4 Z# X: R. Y9 v
  17. //调用查看结果( n4 }# C, m( s2 r8 S# g4 n6 I
  18. echo scerweima('https://www.baidu.com');
    " L4 K( [$ g/ m# o- Z1 t
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
( ^1 R/ h* y2 t/ @
  1. //2. 在生成的二维码中加上logo(生成图片文件)% K2 W& N1 N: M
  2. function scerweima1($url=''){
    ; l1 f) Z  K; S
  3.   require_once 'phpqrcode.php';! \* R8 S7 u8 A$ m
  4.   $value = $url;         //二维码内容
    $ R4 }- r% g7 R0 e1 G
  5.   $errorCorrectionLevel = 'H';  //容错级别
    ! j( ~% m. g, d( y6 r
  6.   $matrixPointSize = 6;      //生成图片大小
    ( g" f4 R3 F* p) Y$ i
  7.   //生成二维码图片
    0 O& a' J) J3 L
  8.   $filename = 'qrcode/'.microtime().'.png';
    / e# t* U% m6 b6 y/ k7 Z
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);2 r: \8 t  t0 U, V* s( D5 u% h0 h
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    ; D- |! z7 p' z2 d8 L( E5 z' O
  11.   $QR = $filename;      //已经生成的原始二维码图- ^* z1 o$ P4 p$ [* D& K
  12.   if (file_exists($logo)) {
    ; c; `5 d3 x! N
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    0 p8 U6 H1 n; B) x+ |: w
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。5 ?( K7 i1 J& [
  15.     $QR_width = imagesx($QR);      //二维码图片宽度: g% y) a/ |, ?6 x# O
  16.     $QR_height = imagesy($QR);     //二维码图片高度0 J$ d( G' C$ f
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    7 V! o/ }9 o& x- o) @7 N' M. G
  18.     $logo_height = imagesy($logo);   //logo图片高度
    6 m) B; k  X* _% ~4 r: v2 d1 y
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    . n6 o3 F4 \4 }/ S" {
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)* Q) f# e# X' K$ }
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    5 {- I" S; t! w# r5 Y' p3 _
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点
    3 ]4 m" L# o' G: {4 N& j+ _
  23.     //重新组合图片并调整大小
    5 E: K; G, s) l2 \8 v: _
  24.     /*/ L. r0 j* O+ ]1 U/ z2 o" ~
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中) c3 K& z7 m# W+ Q) H* P
  26.      */  H& D# q# a, _% h+ D# V& b
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);9 G0 i. y& q& O  H3 F, t
  28.   }
    6 T, }5 R! d1 u( R0 C
  29.   //输出图片
    % ]( p2 k9 D8 S( t3 i
  30.   imagepng($QR, 'qrcode.png');
    " c2 K* V* Z% Y
  31.   imagedestroy($QR);
    * @5 ?4 e+ Q$ E# V
  32.   imagedestroy($logo);( f, _1 r6 l5 e: v4 y
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';2 U% X+ w* A. a  t" K* X
  34. }
    ; f4 j4 f  D; K( W/ W: D
  35. //调用查看结果' Z! |" s  W5 @- x7 F" k
  36. echo scerweima1('https://www.baidu.com');' B  t3 x# v6 w7 A. I
复制代码
3. 生成二维码(不生成图片文件)
/ Z, V! x4 Y2 W9 s1 w
  1. //3. 生成原始的二维码(不生成图片文件). U3 e. l. ^$ t" G6 `* c0 D; Q
  2. function scerweima2($url=''){
    - d: @3 |( z4 ?: _8 I& S
  3.   require_once 'phpqrcode.php';1 v; W0 l9 X# R5 X9 r, ^
  4.   $value = $url;         //二维码内容
    % X5 z, N  C) n- K! u5 M
  5.   $errorCorrectionLevel = 'L';  //容错级别
    - Q1 l% n* ~& ?( Z6 N4 |% A
  6.   $matrixPointSize = 5;      //生成图片大小
    9 `2 f5 e4 e9 H9 _( e3 q- G; G
  7.   //生成二维码图片9 j2 l/ |: L8 B
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);% Z& l1 y) }0 d+ d2 J
  9. }; a; ?" |: d) c
  10. //调用查看结果
    , j& J1 a4 o* P
  11. scerweima2('https://www.baidu.com');6 _5 Q" N' {! G5 t& m. @7 H
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。4 p" n+ o1 J2 `; J( B& x* C
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:. U9 n$ J# \% A) w- ~
在线生成二维码工具(加强版)3 K. d9 z. `. R0 i' {
http://tools.jb51.net/transcoding/jb51qrcode
/ v- p0 t* [8 r. F0 v+ n在线二维码解码识别工具
6 N) k, \6 U! L9 F) U. t4 N
http://tools.jb51.net/transcoding/trans_qrcode* |5 ~" h& P) ~3 I4 w
! w5 U0 _" E! A

  G9 h6 u, ~7 {" N7 t- W
; g7 [8 P; T" P: l: W: w2 v/ z
; D7 {# M* o0 x& f/ ^' @+ r) I: b( l$ |

最新评论

GMT+8, 2026-9-20 23:07 , Processed in 0.050346 second(s), 19 queries .

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