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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2020-7-20 21:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:* k" n4 O4 O" A1 c; D+ Y
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
- Q5 w% B( K% t3 u# X$ l前期准备:* x5 d- @; u; J
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
4 F8 X( }+ N' ^$ N( I" l: D 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)1 v' ^4 D+ ~: y
方法解读:5 W) \" W! N# }; @: ^. R
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
* q0 K2 b: W" i8 K" Q; c# ?
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    6 o; E! ?6 y0 m# }2 ^! m6 J" z& k9 ]
  2. {1 U, v) E2 ?- x, x8 N
  3.   $enc = QRencode::factory($level, $size, $margin);8 w) x/ P& ^% G1 x
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);9 ], E7 t7 Y6 r0 @
  5. }0 e; g, g- T+ N+ S9 N
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;5 B2 i# z. W+ l; f. i% n) |
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;  J9 {! k' [& z
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
  o5 ~  |0 K- b; Q4 Y4 V 第4个参数$size:控制生成图片的大小,默认为4;
/ X0 b; u3 g& d, w! ]$ E 第5个参数$margin:控制生成二维码的空白区域大小;
$ j1 O! Z5 q/ [* V# F 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;/ x+ {6 d3 `# W' Q
使用示例:
1 @4 X) C0 \! G6 U1. 生成二维码(生成图片文件)
+ B; l- @" w8 S* j  A
  1. // 1. 生成原始的二维码(生成图片文件)
    2 y& r  O, v6 ~5 I% C7 P
  2. function scerweima($url=''){. R, L  A( E3 h4 [- y, ^2 u$ g; H
  3.   require_once 'phpqrcode.php';$ M( l; y/ z/ w0 l. t7 c
  4.   $value = $url;         //二维码内容
    % A6 C& i. @. @2 y) o% j
  5.   $errorCorrectionLevel = 'L';  //容错级别
    0 {: G% D/ A2 b# }& F
  6.   $matrixPointSize = 5;      //生成图片大小* T) U4 c& w% `: c2 A
  7.   //生成二维码图片
    8 h. u, H: N6 }* j- V! c8 J8 g
  8.   $filename = 'qrcode/'.microtime().'.png';
    ; U% D, n: x  U0 o* ~
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    ) U- F" P2 |+ b* K) m* I
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    7 L4 e3 }6 Y+ {5 j- J
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    2 t; R1 L, {. h" |: z
  12.   //输出图片
    ; q  x7 z, W) m/ s& z" ]( {
  13.   imagepng($QR, 'qrcode.png');
    - _4 I+ h8 h- o. X3 ^8 e0 U
  14.   imagedestroy($QR);
    ) H  E3 Q( f9 _7 t& A
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';9 `, b' R; Q! d7 C! z  S
  16. }
    / j( U$ F) ]# |( a  G$ S
  17. //调用查看结果2 V3 \" {6 {, W3 {4 b
  18. echo scerweima('https://www.baidu.com');
    # r. Z! W9 m/ x& i4 Z% m. s
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
* V6 `0 D. V' p& n; u5 U. v
  1. //2. 在生成的二维码中加上logo(生成图片文件)# F; n3 \. [: t8 U
  2. function scerweima1($url=''){
    6 D" q2 p0 Z4 G) L' `& r
  3.   require_once 'phpqrcode.php';# d+ ]0 d5 K) \" z! r
  4.   $value = $url;         //二维码内容
    - ^! l3 u) w3 |
  5.   $errorCorrectionLevel = 'H';  //容错级别
    & q# J% ~, K" {. @8 q: \: j/ x
  6.   $matrixPointSize = 6;      //生成图片大小- A& M7 c) k" L2 W8 h; h) f3 g
  7.   //生成二维码图片) l; j7 C6 V- T- S' o. v+ f! |: S/ c4 f
  8.   $filename = 'qrcode/'.microtime().'.png';1 p  J$ l  M3 r( c) Y8 o% w' ?
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    : |$ y) A. J" v6 I, j
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片3 ~% {: A+ _. m' K: W* a
  11.   $QR = $filename;      //已经生成的原始二维码图3 d) a8 }- h; ^5 e" _
  12.   if (file_exists($logo)) {
    % }$ p6 t( }3 J# Q7 @
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。+ o; O1 T* S# s! w
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。+ n9 u+ l( X/ P: Z
  15.     $QR_width = imagesx($QR);      //二维码图片宽度2 ]4 R9 y3 a7 p7 |! S
  16.     $QR_height = imagesy($QR);     //二维码图片高度
    . N# S4 @/ c" A4 s( f6 S: ^  A
  17.     $logo_width = imagesx($logo);    //logo图片宽度3 Q7 f; ~; f' i! V( X. K; {5 t
  18.     $logo_height = imagesy($logo);   //logo图片高度( w/ D# Y6 L$ u; d5 z5 ^
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)! _5 l9 x1 a( @
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    8 n# Z- v$ Z& `$ i4 L& ~
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度0 h  v7 H' r; j6 i8 e: b/ H, [
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点0 {6 u. h; T' J# K( L3 ?
  23.     //重新组合图片并调整大小: {) J, K, J; M
  24.     /*4 G8 @5 Y4 U" M3 V- o) }
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中9 O. u2 E) ?& z$ R
  26.      */
    . }% r. v1 J$ \$ Q) v  @
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    " K. i2 @; w& v' y* M! L% |8 r
  28.   }
    0 o1 R1 ~' X. T
  29.   //输出图片% ]0 N8 {: B  r$ s4 W% m# F
  30.   imagepng($QR, 'qrcode.png');, z. ?3 M- S* w( _! [; u  K
  31.   imagedestroy($QR);
    * Q! {" O3 u1 f# R) o! O
  32.   imagedestroy($logo);
    ; b0 R/ o! {6 U# Z+ l3 N$ e
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    ; [5 H# k0 Y: J1 E
  34. }% U, U8 D; `7 }) \" ]- [7 W+ I6 }
  35. //调用查看结果
    & c# p' S& b2 a
  36. echo scerweima1('https://www.baidu.com');
    ! N: F& V8 Z/ o( {3 w% l
复制代码
3. 生成二维码(不生成图片文件)
8 I5 C3 Y4 F/ d! [8 m
  1. //3. 生成原始的二维码(不生成图片文件)
    ; G/ t% h! t3 C+ T6 _8 {
  2. function scerweima2($url=''){
    1 m9 J+ D- d& m, t  t  I( e
  3.   require_once 'phpqrcode.php';6 V; o3 M  m5 M) K
  4.   $value = $url;         //二维码内容( @( o9 O; M* c% K  A5 o
  5.   $errorCorrectionLevel = 'L';  //容错级别
    ' n$ r7 w* x1 Q3 q. v& F) h
  6.   $matrixPointSize = 5;      //生成图片大小
    7 X4 q* U7 \1 Y1 J
  7.   //生成二维码图片. g/ k- F. q& b5 I0 r5 I
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    # x% P( |  E* N
  9. }
    3 r! [! E* s7 h* o# ?
  10. //调用查看结果( \" y: J$ \+ W1 i) e
  11. scerweima2('https://www.baidu.com');
    % ^& u* N. q( q( }( {
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。1 ^  v! m) Z9 l. |
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
8 [# I$ q" F0 t& Z# `7 N: N+ J在线生成二维码工具(加强版)6 A% G% r& U/ h; t; w
http://tools.jb51.net/transcoding/jb51qrcode4 S& P* N3 ?6 L2 _$ p
在线二维码解码识别工具5 u% p$ ?6 x) |5 P3 L' f
http://tools.jb51.net/transcoding/trans_qrcode( h6 Y+ B; F2 E" i: D
* O) j% x" _. t" {7 F( M1 M6 h
) Y& F8 w1 w! g7 b
0 a& F* v/ p4 p  V8 M
  K% G+ R/ G* G* q+ ?
0 ^& i  k  F% W' h+ S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:47 , Processed in 0.081842 second(s), 20 queries .

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