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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

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

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

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
- T; w3 K4 Y: w9 s. l# b使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
3 H8 U1 e  S: M. e. \& q$ u前期准备:$ z" @, O: W2 }. o7 G
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/0 T' y) a( P( c: O
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)! w- b1 h: r9 O( J5 X0 H; N
方法解读:# s. B- N  ]2 ?6 d( ^0 Z  f
下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
$ f# i) O3 b% r8 ^3 x2 B8 k
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
    + L, O5 x( S1 D: A+ T
  2. {$ k5 z& u4 u+ o$ j6 A
  3.   $enc = QRencode::factory($level, $size, $margin);2 z& {. c! ^8 W. i3 l5 I; F
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    * ^- m: F* |, u; n: q0 r  m, b
  5. }
    7 u- `# R. C3 `! ?- Y/ Y
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;( F3 o- E0 s) ~
第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;
4 B# m. s" P! j 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;4 F0 O! d5 U% i* H7 k' a9 \0 |
第4个参数$size:控制生成图片的大小,默认为4;7 Y( k) ^9 m. v- S. n7 [, P
第5个参数$margin:控制生成二维码的空白区域大小;
8 q7 |7 f5 o0 v8 O, o: U 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
) E9 J# y+ J) J; c8 o$ @使用示例:! p9 |6 X- z4 f7 M4 L" T
1. 生成二维码(生成图片文件)
% f0 k; n. `# g) T
  1. // 1. 生成原始的二维码(生成图片文件)* |; t' X- c& ]
  2. function scerweima($url=''){
    - {# \4 }% d9 N% p9 Z# }7 L
  3.   require_once 'phpqrcode.php';
    2 @' v$ l$ h9 @# P. r
  4.   $value = $url;         //二维码内容
    0 T$ g  p3 b# t  x* T
  5.   $errorCorrectionLevel = 'L';  //容错级别/ w% L5 a6 ~1 f5 z9 _
  6.   $matrixPointSize = 5;      //生成图片大小
    , i  A" H, o9 Y- I" ]
  7.   //生成二维码图片
    7 U5 F# a; c$ B& K4 w( G
  8.   $filename = 'qrcode/'.microtime().'.png';+ w2 {2 ~; Z! z+ _8 Z
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    , @+ v- y' ~" ]3 N3 r. j4 G$ n
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    5 B( K# ^  ]9 @! j9 ^& P8 ~: w
  11.   $QR = imagecreatefromstring(file_get_contents($QR));# p5 X, ]" i% [* K7 }7 z
  12.   //输出图片
    1 B2 a  P' b2 w5 q3 N
  13.   imagepng($QR, 'qrcode.png');
    4 G* D8 q4 \3 L& l" O& x! n
  14.   imagedestroy($QR);& d) V3 e& g% p" I+ N- o0 y- N1 y
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    ' y3 D4 |* \$ B9 [' [( e' S
  16. }
    - C+ w  R( M9 X# u8 a' b* j0 J
  17. //调用查看结果
    3 b) \, [9 M8 g( g( u4 U; g
  18. echo scerweima('https://www.baidu.com');
    % K6 t1 p) L$ y8 C
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
7 g/ {( R8 }- K7 |: a0 E5 ]
  1. //2. 在生成的二维码中加上logo(生成图片文件)
    ; t! p, f3 Y* b8 o% Q+ ^
  2. function scerweima1($url=''){
    3 c$ o+ H' p/ i3 ]
  3.   require_once 'phpqrcode.php';9 W( B0 C% ?% V
  4.   $value = $url;         //二维码内容* @# b* m' c. f3 b% }+ j& u
  5.   $errorCorrectionLevel = 'H';  //容错级别) O. j# k, c2 `+ q/ O7 Z
  6.   $matrixPointSize = 6;      //生成图片大小  I' D2 }$ V6 ?. J; l0 ?
  7.   //生成二维码图片+ h" b! A8 J2 |* ?
  8.   $filename = 'qrcode/'.microtime().'.png';
    - Y0 A! E& Q0 B4 T, p
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);6 c; g. _  I( }& b3 @
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片( V" j* U- _# F" l1 l
  11.   $QR = $filename;      //已经生成的原始二维码图
    9 o9 S, s" R# p3 K
  12.   if (file_exists($logo)) {
    / L* }7 Q2 y" J5 ?; G' k/ q7 H8 W
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。3 b# y& V/ ^  @2 k- R0 R
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    % F; k8 r2 a1 W* G# k# ~: u' b
  15.     $QR_width = imagesx($QR);      //二维码图片宽度& [0 L6 N! c' W
  16.     $QR_height = imagesy($QR);     //二维码图片高度- u) y# \* v( U
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    , C1 N/ M8 K0 Z* |+ Q+ A  [
  18.     $logo_height = imagesy($logo);   //logo图片高度
    9 m8 l2 w/ B! H; ?6 p3 G+ P
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)8 U. \5 k0 {: o
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    $ m7 A) M, S$ F! Q# _% h
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度+ v7 c5 s9 U2 C5 N8 t
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点0 Y; m- L7 S+ j! ~
  23.     //重新组合图片并调整大小7 P, H8 ^- n5 H5 X
  24.     /*1 ^! J# n9 r' z- b7 G, o% V0 C3 m
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中! F+ j# q. E. M4 g
  26.      */
    ( i/ U4 G9 q4 o/ g$ J! m
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);7 ^# |5 z  X  U' G" ^
  28.   }" a7 s$ v* k/ H- S8 w
  29.   //输出图片: M( s/ `1 U. c3 V
  30.   imagepng($QR, 'qrcode.png');
    7 |5 O: K7 I9 ?! y7 X
  31.   imagedestroy($QR);" e2 I! f' _" E8 j! r( a5 W  c
  32.   imagedestroy($logo);8 `5 v, A$ W! U* k$ _# L
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    ' a2 z3 L" o' p& m8 H
  34. }
    8 n* l. ~4 _# K; L" ]
  35. //调用查看结果% N3 }$ n- x# Q/ h4 X; c( E$ w0 m
  36. echo scerweima1('https://www.baidu.com');
    " k9 N" ?" M/ w0 C( j0 p6 C
复制代码
3. 生成二维码(不生成图片文件)- l; F# Y1 |( ~7 `6 K* V
  1. //3. 生成原始的二维码(不生成图片文件)
    8 j" F1 H. D" {) [+ m% w
  2. function scerweima2($url=''){+ E0 \8 R+ g1 X& O- G
  3.   require_once 'phpqrcode.php';
    & Y8 a# x) g) y$ I
  4.   $value = $url;         //二维码内容
    / C3 G8 Y3 k7 K' G: {
  5.   $errorCorrectionLevel = 'L';  //容错级别
    ' q) Q$ |. u: j0 g! Y1 w/ ^. O
  6.   $matrixPointSize = 5;      //生成图片大小
    , I/ `' l; Z1 s/ e
  7.   //生成二维码图片
    4 i) @; I. @% K. q$ I
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    % e3 A( [+ b% D9 y' ^$ q& h
  9. }
    1 y0 w+ R9 \7 \8 q
  10. //调用查看结果( U0 D$ }0 V- M6 d
  11. scerweima2('https://www.baidu.com');
    6 N, g% F2 \, B) M& w; ^  w( O/ f! W
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
7 V: J; [7 i6 J8 ~PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:) e  ]/ h2 K, Y: Y
在线生成二维码工具(加强版)
. i5 U+ j2 |& p$ i' v/ F' Z+ Z( _
http://tools.jb51.net/transcoding/jb51qrcode4 m5 h( f& ~. G) I% U
在线二维码解码识别工具
3 e: T8 x5 w% i# n% C+ o, F9 A% g
http://tools.jb51.net/transcoding/trans_qrcode
& R& j" z% G8 q0 V! z# D  R
: U' U% \- H+ o6 J# _; F( m8 k7 ?3 W, e" ^
( K' M0 s0 h& b- W  W

  `6 [4 m% ~% x1 Z! Y
6 s( l8 S. w8 _' F

最新评论

GMT+8, 2024-4-26 19:30 , Processed in 0.122205 second(s), 29 queries .

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