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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 门户 查看主题

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

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

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:! ~. V' p3 P) g6 ~
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。
" q% |5 t2 d9 b! L8 j前期准备:
' U1 q. Z, p4 T0 y4 W1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/
/ V2 x, {! e3 x7 H. l 2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)$ g# h1 [8 ]$ i8 C# a9 F
方法解读:
+ P9 @# @8 u6 `3 M下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
0 O! Q1 l1 q, j0 ^, u, ~3 f
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)+ p. ]; P" `$ x6 M
  2. {
    3 t, p6 [# {2 |5 r! }, E
  3.   $enc = QRencode::factory($level, $size, $margin);
    % e. I% \0 ?' V  ~# Y
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);0 j1 u2 a# c+ K, |8 a/ A$ {: _1 o
  5. }! d! l2 O* x( O+ i& c, C( L
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
9 }1 F% h! q. ?+ r( l" O 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;1 x( C) U- j8 `) L; R3 \
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;1 |* Y) b- ~6 S# c
第4个参数$size:控制生成图片的大小,默认为4;
' j; y& _% H& r5 j: R 第5个参数$margin:控制生成二维码的空白区域大小;" ]! ~( C8 p/ z5 R5 G" N, X) _9 h
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;8 ^( H$ j6 F' O+ Y% R0 R& L" m
使用示例:
; J) d7 @2 }* N; M0 \* S( R: i/ `3 \6 }1. 生成二维码(生成图片文件)
4 U7 ^" Z% \+ S/ V$ e
  1. // 1. 生成原始的二维码(生成图片文件)) b7 _  b6 s- C$ Y; l" H
  2. function scerweima($url=''){
    % U1 T9 u8 y/ w& V
  3.   require_once 'phpqrcode.php';( k$ |8 N# p$ z9 `7 y- {, E) p
  4.   $value = $url;         //二维码内容
    # K/ a: ], M  m  k* W
  5.   $errorCorrectionLevel = 'L';  //容错级别1 `0 f( @. p( O3 o
  6.   $matrixPointSize = 5;      //生成图片大小
    + r. A9 F  i' X1 ~6 [9 b/ S
  7.   //生成二维码图片
    , C3 O; F% B7 c( G9 T
  8.   $filename = 'qrcode/'.microtime().'.png';  Y+ t3 u9 K6 G' n7 }
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    : M* J. H  _) T
  10.   $QR = $filename;        //已经生成的原始二维码图片文件0 }' o" v5 l& t) v
  11.   $QR = imagecreatefromstring(file_get_contents($QR));
    1 q5 `: N- t& ]
  12.   //输出图片
    - `/ A# |( G2 n8 f- ~3 z
  13.   imagepng($QR, 'qrcode.png');
    4 g0 g$ F& E5 Z: B& Z& C
  14.   imagedestroy($QR);; w) I9 E$ |, U7 n
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    ) P% j3 a7 d; \/ q9 U1 D
  16. }' q- }0 B& `8 s$ R% s
  17. //调用查看结果5 c* `2 s! {/ C- p
  18. echo scerweima('https://www.baidu.com');
    & ^; x/ l. G+ u
复制代码
2. 在生成的二维码中加上logo(生成图片文件)) P- O+ \6 C  Y
  1. //2. 在生成的二维码中加上logo(生成图片文件)* v' n4 m; ]' X; w/ @' e
  2. function scerweima1($url=''){& m) G+ }* p8 f+ m( W
  3.   require_once 'phpqrcode.php';# U% l8 o/ W4 W2 d; g& A1 N
  4.   $value = $url;         //二维码内容
    * O1 P) m0 |  U' r: t
  5.   $errorCorrectionLevel = 'H';  //容错级别7 A  E8 i) u& x% V7 c# [/ V& W( j/ k5 X
  6.   $matrixPointSize = 6;      //生成图片大小  u# W" d; ?7 ]! S0 t$ w! S
  7.   //生成二维码图片
    6 ^. y' N0 U" C3 z% ^* J
  8.   $filename = 'qrcode/'.microtime().'.png';
    $ s' G! D6 O0 q
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    1 g* w0 ~/ d9 h5 r& v  n) x
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片! N. z- o" U, D! B6 [
  11.   $QR = $filename;      //已经生成的原始二维码图
    0 ^/ F6 v/ V6 I- }2 R
  12.   if (file_exists($logo)) {) d1 p& v+ g+ W' t
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    6 S+ I( O2 W" T1 \. U
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。( Z, Y" }2 l. z+ F( `5 q" K  \
  15.     $QR_width = imagesx($QR);      //二维码图片宽度7 ?' p. U% G( x7 l) W7 k
  16.     $QR_height = imagesy($QR);     //二维码图片高度; T+ Y7 \( c* e4 c
  17.     $logo_width = imagesx($logo);    //logo图片宽度
    8 {' t2 d. k+ P: W
  18.     $logo_height = imagesy($logo);   //logo图片高度% V; N: b# N+ h. p/ d
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)0 W' n' j, z. @( y
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    : q" w: Y5 c: k
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    9 c! U1 t, N) u& r
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点# N; x" H8 G+ {  ]+ {
  23.     //重新组合图片并调整大小
    1 }* v, `5 w4 [( V1 R
  24.     /*; u2 B8 `0 ]$ w( j+ U/ k; o8 L: j. W
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中4 O5 e$ i! X. G2 A3 A2 V3 r
  26.      */
    2 l) d+ e! c4 W2 h' x, L3 p
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    8 q9 ~5 M; O6 U! f" R. E
  28.   }3 z% `% `# K; {+ d+ S
  29.   //输出图片0 w2 t: o) _) P0 H- }8 ^- K
  30.   imagepng($QR, 'qrcode.png');
    4 T  Z5 d5 e) S. @2 o
  31.   imagedestroy($QR);* f  v1 ~. C  e- D
  32.   imagedestroy($logo);5 \9 H" g1 G* L! i0 r1 r$ \
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';
    ( u1 N4 N, K' S
  34. }( d3 A' X& `3 g" k
  35. //调用查看结果" x+ T& }' y4 N/ B3 }* N0 O$ t
  36. echo scerweima1('https://www.baidu.com');5 L! f' G; m* O* E+ H
复制代码
3. 生成二维码(不生成图片文件)) J7 L* A4 R& v0 H4 M, v
  1. //3. 生成原始的二维码(不生成图片文件)
    : v- l8 O) d5 ]" ^0 E
  2. function scerweima2($url=''){
    3 k7 c3 E1 z' H9 @
  3.   require_once 'phpqrcode.php';
    ! U2 L5 f2 o) @( e
  4.   $value = $url;         //二维码内容# }4 j! [  r# t. D( ~0 Q  w. f9 A
  5.   $errorCorrectionLevel = 'L';  //容错级别' _) D" B) P# T+ M: Q# ^8 H
  6.   $matrixPointSize = 5;      //生成图片大小) X4 x+ M/ M  n3 I
  7.   //生成二维码图片" \5 n" e3 V- S( W. @
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
    & f, ^3 v% J* t: U' u
  9. }1 g9 T; M1 X6 g6 {8 _
  10. //调用查看结果5 R! N! E: V! c. ?% c: v( C
  11. scerweima2('https://www.baidu.com');
    5 V9 I$ x% C% x& C
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。
' \) {) ?( {0 f% o2 UPS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
/ f; D- _! Q, C  E# ]在线生成二维码工具(加强版)+ ~$ E( g  w0 f: k+ A6 D3 u. W
http://tools.jb51.net/transcoding/jb51qrcode
4 ~/ ]6 C0 v+ K在线二维码解码识别工具
9 _4 [1 A  Q% m3 T: _
http://tools.jb51.net/transcoding/trans_qrcode
+ M/ K1 ]' A8 d- M% x
, }3 Y+ a1 _7 m
# q3 H% M9 q! Y
1 _$ m4 e& X9 |2 \; A* u3 i' \# ]  R, l3 |
; C8 N( {; m, p7 l/ ?

最新评论

浏览过的版块

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

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