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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:& ^+ `) u# W  i5 @$ U
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。3 S+ U8 l6 y- H/ k2 m
前期准备:
. ~# @, D1 r% a# U& {7 c+ c, K1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
, Z' C) Y3 Q$ ~- l4 V0 o 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)" x, J$ ^2 k) N5 L9 K3 s
方法解读:: G6 _, t( Q- K3 w$ l2 {
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
" v5 x2 E9 N9 L! p8 s
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    $ e' R$ n6 y8 a0 T
  2. {
    & u8 [+ f4 T, T# [7 G
  3.   $enc = QRencode::factory($level, $size, $margin);6 \1 Q& O  w% j2 \, K3 \
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    7 J% K* @" S: B+ [$ ~& O3 h/ f
  5. }
    4 M6 W" }6 R# o9 n7 i" z0 ?4 \
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;1 a. v2 q% I* `# n
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;- S3 x  |% N5 L- ]# K4 w' n; O
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
$ G5 H! G1 E; W4 Q6 w4 l 第4个参数$size:控制生成图片的大小,默认为4;7 C' g* Z! y7 g0 m8 D5 p
第5个参数$margin:控制生成二维码的空白区域大小;
" M  T7 x! V) J/ G% O  |- L" U 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;/ P1 E- X3 u& G" U! \
使用示例:
3 `. r1 i0 j# G: z) N& J- {! y; j1. 生成二维码(生成图片文件)
( H! S. f& o8 \6 h- a9 g) J
  1. // 1. 生成原始的二维码(生成图片文件)1 p' [' [$ C& ?1 y. n0 C; i6 G
  2. function scerweima($url=''){* k- m" s$ B% W2 n! C% k
  3.   require_once 'phpqrcode.php';0 z% O. G0 w; p
  4.   $value = $url;         //二维码内容! S, u/ t1 G+ ~: {; m0 V
  5.   $errorCorrectionLevel = 'L';  //容错级别7 ]! J7 ?9 ~+ M  R( ^! L
  6.   $matrixPointSize = 5;      //生成图片大小3 S; m$ P+ Q4 u4 y) B% R( }6 m
  7.   //生成二维码图片
    * r8 o7 d9 o& |5 i/ c# p# N
  8.   $filename = 'qrcode/'.microtime().'.png';
    6 W$ Y7 c+ [$ j
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);3 h# `# W" I2 X/ H" c
  10.   $QR = $filename;        //已经生成的原始二维码图片文件8 [8 X" L& P) X- v1 x
  11.   $QR = imagecreatefromstring(file_get_contents($QR));1 q8 m1 n4 `$ ?  h$ q
  12.   //输出图片) D5 H' n3 a& I
  13.   imagepng($QR, 'qrcode.png');
    0 D2 E3 c) E' u& }! v* g. O
  14.   imagedestroy($QR);
    & d: p- X+ R% ^+ K* o9 m& m
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';) K3 ?1 X' i2 r0 q7 K$ I
  16. }& z( h/ t! k3 o3 D+ R4 s
  17. //调用查看结果
    % i  T7 Z' A6 ?! t. r3 s  B2 O
  18. echo scerweima('https://www.baidu.com');
    % U! q+ r. H! N5 c; e
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
! Q  M/ ~5 l; G8 X$ Y3 k( J7 z
  1. //2. 在生成的二维码中加上logo(生成图片文件); u. ]$ T% j2 B# S3 U0 p5 d; b
  2. function scerweima1($url=''){+ m7 d1 X6 @% l5 b9 i4 O
  3.   require_once 'phpqrcode.php';
    * Q# q5 W1 }, ]+ i
  4.   $value = $url;         //二维码内容- A+ T) v, a* P- y( S
  5.   $errorCorrectionLevel = 'H';  //容错级别5 B7 I! S9 R  U% L5 Q' ~
  6.   $matrixPointSize = 6;      //生成图片大小
    1 y) D# U- q0 k/ m  J' [" |' Q2 S
  7.   //生成二维码图片; E- u6 S2 s' j/ v5 ]
  8.   $filename = 'qrcode/'.microtime().'.png';5 ^1 H* v; e' @4 X+ O7 {* x
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);! X4 R! B2 [# T' u# ], Q( j% ?
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片; S! r0 b5 \5 b* e- T* m' n' a
  11.   $QR = $filename;      //已经生成的原始二维码图
    5 m0 h9 F3 B0 Q: a  W
  12.   if (file_exists($logo)) {& H8 k2 s7 ~# W, Q- m) n
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。: ?1 v( z4 H6 ~0 f, N# n% p- F: y1 r
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。* ]# e6 e; k$ J3 J
  15.     $QR_width = imagesx($QR);      //二维码图片宽度
    ! r! X+ g! a# k0 W
  16.     $QR_height = imagesy($QR);     //二维码图片高度! G5 v& E! F6 O, K
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    - S% }, j& H8 @5 x8 K3 R
  18.     $logo_height = imagesy($logo);   //logo图片高度
    7 }4 q# W8 {9 m  a
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)
    $ }) F* k. k- d9 u, V4 y
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度); A& l1 O% K/ v! b
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度: s. C4 k9 g/ J3 u4 s! t) Q) e
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点3 }: w; p  e1 y* Q
  23.     //重新组合图片并调整大小
    5 ^; [5 L6 `1 I2 E) H7 O
  24.     /** c* k; _( q. e1 c
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中: I' q; ?' p) \5 i4 z/ T+ V: n
  26.      */
    6 c$ L# u0 K: p; s* l, X& y! X2 s
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    ( O$ Y' O3 n- Z) s# x
  28.   }" `4 D& f& [- R* v1 `4 \
  29.   //输出图片
    7 u( F6 G" {0 R, M
  30.   imagepng($QR, 'qrcode.png');- U/ K# \- v' n2 F2 [1 q% t3 O
  31.   imagedestroy($QR);# r8 E8 P# F+ g
  32.   imagedestroy($logo);/ I  l! N) u" F3 ^
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';  W0 L/ O) N8 L' h5 {) ~
  34. }+ I9 l* i  ^* G' w: J7 W% ~# e% W/ {
  35. //调用查看结果
    1 U1 D0 @# T0 s: H2 l' z
  36. echo scerweima1('https://www.baidu.com');
    3 j! u3 e2 S; B" L8 B, c7 e
复制代码
3. 生成二维码(不生成图片文件)3 h9 _! k; ~0 O
  1. //3. 生成原始的二维码(不生成图片文件)
    1 g& c, C% J' j, q8 H
  2. function scerweima2($url=''){( N# _+ K- n% B
  3.   require_once 'phpqrcode.php';
    % w& X( _" n. S* {
  4.   $value = $url;         //二维码内容
    8 y1 G7 ~9 F% ^! g2 B
  5.   $errorCorrectionLevel = 'L';  //容错级别
    / h2 p8 O1 w# |3 W5 p6 c
  6.   $matrixPointSize = 5;      //生成图片大小
    ) C# ^/ d: \4 F. T% {6 s
  7.   //生成二维码图片
    : E2 R! R3 {  D; U9 N
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    ! N5 S! A* ^3 b
  9. }" @$ q% b/ c2 p2 F, N" y5 I
  10. //调用查看结果
    # C- {- r7 g: y+ b- `
  11. scerweima2('https://www.baidu.com');9 p& t7 m& G+ ?5 `( |
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
1 L7 z* b7 t: a! `' @" q! tPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
6 _+ l/ A0 {3 D- r在线生成二维码工具(加强版)% H  g( W( o7 V+ k- s
http://tools.jb51.net/transcoding/jb51qrcode# D1 B5 f- F8 S& {7 d
在线二维码解码识别工具0 a. c* e  a  N$ m  a
http://tools.jb51.net/transcoding/trans_qrcode
: I' E& F. D2 _* q% W% w5 y* }2 m& h5 c

& H, h0 l& Y9 U3 f* I* R
; C9 e& L0 e$ d
  r3 _7 f6 K5 o# m. [
* ?1 q- h# K' V$ ^7 W/ P9 G# U* R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 07:06 , Processed in 0.071326 second(s), 19 queries .

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