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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

cncml手绘网 › 门户 › 查看主题

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

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

本文实例讲述了PHP基于phpqrcode类生成二维码的方法。分享给大家供大家参考,具体如下:
, J# N% }$ ^2 m% Y$ h. ~* L9 j! z. D使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手。然而,我们可以使用phpqrcode这个现成的类文件,PHP二维码生成类库,利用它可以轻松生成二维码。/ e0 A3 }1 M9 H8 v
前期准备:/ J" G, [6 D4 B3 g5 E+ n: Q
1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/1 _, G% d' [' W5 \! E" l2 Y
2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是开启状态)
: X: \' F3 m( ~5 \+ L6 g方法解读:
% }+ t7 h( c! o8 ^* h0 ?下载下来的类文件是一个压缩包,里边包含很多文件和演示程序,我们只需要里边的phpqrcode.php这一个文件就可以生成二维码了。它是一个多个类的集合文件,我们需要用到里边的QRcode类(第2963行)的png()方法(第3090行):
6 m5 \! O" @% L! _& W1 n
  1. public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)9 t. k' ^  l+ Q
  2. {5 l+ z2 E1 \- E, X& d
  3.   $enc = QRencode::factory($level, $size, $margin);
    - [  ~: z" `+ p* W
  4.   return $enc->encodePNG($text, $outfile, $saveandprint=false);
    6 u) ^" h2 \; L7 z+ X
  5. }! b8 `) F- A) M8 y! K
复制代码
第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等;
  E2 p: U: T, V 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径;& l) i' e6 `9 [1 v1 `
第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别;
8 ^* R4 |$ P; ~: F3 [. G 第4个参数$size:控制生成图片的大小,默认为4;
; X% i6 b) d' A6 F6 B0 n 第5个参数$margin:控制生成二维码的空白区域大小;2 I# _/ G3 m, ~
第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径;
" i8 A0 Y- a' x3 h使用示例:
! l8 ~# r$ s, m1. 生成二维码(生成图片文件)
0 ?) B- P) S, x
  1. // 1. 生成原始的二维码(生成图片文件)3 K  S: W4 _& O4 a/ L& h
  2. function scerweima($url=''){
    8 A7 p5 z. x1 D! _
  3.   require_once 'phpqrcode.php';
    9 ~* Q9 b7 X3 [( u, `4 o+ c  r
  4.   $value = $url;         //二维码内容0 v! `$ Z0 L2 m3 Y
  5.   $errorCorrectionLevel = 'L';  //容错级别
    $ t8 Y1 h: o3 I6 x. K
  6.   $matrixPointSize = 5;      //生成图片大小
    0 D2 P5 @1 p' z3 C$ [! ]! h- i& v6 p
  7.   //生成二维码图片
    9 Y$ V0 S4 I& U$ x
  8.   $filename = 'qrcode/'.microtime().'.png';
    " Y' q# j' M* K2 {
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
    / @. A4 `: }  q. x! T  ]0 X- e3 L
  10.   $QR = $filename;        //已经生成的原始二维码图片文件
    . H" T4 H+ a& d6 f5 C! ^* o( }; `2 h
  11.   $QR = imagecreatefromstring(file_get_contents($QR));$ U% M8 k! F+ v
  12.   //输出图片
    / x2 t+ L6 o9 s  u/ ^' _3 ]
  13.   imagepng($QR, 'qrcode.png');
    " Q4 t, p1 q, a: C5 t) V# R
  14.   imagedestroy($QR);, o& M' {" k7 y2 R3 w
  15.   return '<img src="qrcode.png" alt="使用微信扫描支付">';0 P* l. B: d# _! J4 k
  16. }- M* }: h- H) m2 N7 u
  17. //调用查看结果* Q& G2 }/ w- T5 K6 x
  18. echo scerweima('https://www.baidu.com');, o- g8 D# i% o8 n7 g, O
复制代码
2. 在生成的二维码中加上logo(生成图片文件)
! O: q4 U3 K! n5 E3 L. ^
  1. //2. 在生成的二维码中加上logo(生成图片文件)$ K6 h9 N+ A7 g/ ^: s/ }
  2. function scerweima1($url=''){( d: `; d- S" z; S' K  u
  3.   require_once 'phpqrcode.php';
    ' Y: b# |5 K& z& A
  4.   $value = $url;         //二维码内容& @2 ?1 K) n$ ^0 E$ s1 I# Y
  5.   $errorCorrectionLevel = 'H';  //容错级别1 ?2 c( ?/ I' o6 ^7 S; F! S% z
  6.   $matrixPointSize = 6;      //生成图片大小# d) k1 y( K& Q( _  t" V9 e! n
  7.   //生成二维码图片
    3 ?9 ?5 D7 m+ m) _9 N
  8.   $filename = 'qrcode/'.microtime().'.png';
    4 @4 I5 ^7 b# W7 H
  9.   QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);5 h+ l" X9 ]1 S1 b" P: f* c
  10.   $logo = 'qrcode/logo.jpg'; //准备好的logo图片
    4 P& H+ \6 b$ X5 d
  11.   $QR = $filename;      //已经生成的原始二维码图
    / O1 Z9 g( K6 w1 F" k
  12.   if (file_exists($logo)) {
    0 B- I* ]3 S. p
  13.     $QR = imagecreatefromstring(file_get_contents($QR));    //目标图象连接资源。
    6 c4 m# w! a% _+ B& X. {# Q
  14.     $logo = imagecreatefromstring(file_get_contents($logo));  //源图象连接资源。
    9 |# z. l) b+ D3 P7 j
  15.     $QR_width = imagesx($QR);      //二维码图片宽度; _& R8 f% [1 ~- U0 ]
  16.     $QR_height = imagesy($QR);     //二维码图片高度) [/ k' z7 J: {! R: }2 z- {- h
  17.     $logo_width = imagesx($logo);    //logo图片宽度2 \2 o3 R  B1 n8 m" m
  18.     $logo_height = imagesy($logo);   //logo图片高度
    / u. o' l3 ^8 Y
  19.     $logo_qr_width = $QR_width / 4;   //组合之后logo的宽度(占二维码的1/5)# S# T5 t5 i  J
  20.     $scale = $logo_width/$logo_qr_width;  //logo的宽度缩放比(本身宽度/组合后的宽度)
    & [0 b9 t- T* U
  21.     $logo_qr_height = $logo_height/$scale; //组合之后logo的高度
    / {# y( L& l- M4 e4 h8 w
  22.     $from_width = ($QR_width - $logo_qr_width) / 2;  //组合之后logo左上角所在坐标点( n: |$ B" |' D
  23.     //重新组合图片并调整大小. i& Y7 a8 }; v; w
  24.     /*
      @% Z2 U0 M. v6 `3 u* Q
  25.      * imagecopyresampled() 将一幅图像(源图象)中的一块正方形区域拷贝到另一个图像中
    0 M, E2 I2 W( k, C; {5 t
  26.      */
    ; `; V' K5 m7 `% b! l+ |% _
  27.     imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
    2 Y& {  H; z7 v% F5 u7 ]
  28.   }6 Z, c+ H2 i' _' B
  29.   //输出图片
    0 I; @! v1 H  g
  30.   imagepng($QR, 'qrcode.png');
    . z5 m  d4 H( W2 m# s' p( w9 ?3 v3 N
  31.   imagedestroy($QR);
    % E; G" a3 Z$ b  l
  32.   imagedestroy($logo);
    5 S) k, m$ x, F7 C9 A
  33.   return '<img src="qrcode.png" alt="使用微信扫描支付">';" I1 v! r0 P8 h3 U0 P( J
  34. }: i) R, a  O2 B. b' z* j
  35. //调用查看结果
    3 M  g. J3 ]- l8 y
  36. echo scerweima1('https://www.baidu.com');. n  c& V6 H  f$ O) H' L% v) @" e
复制代码
3. 生成二维码(不生成图片文件)+ ^6 k8 @5 H* m  T4 G, H/ }
  1. //3. 生成原始的二维码(不生成图片文件)
    ( `1 ^) J8 \4 c0 _2 ]7 D
  2. function scerweima2($url=''){
    6 \/ {" p9 o  H7 k" o
  3.   require_once 'phpqrcode.php';
    ) Z1 D6 u: I% q! o% h
  4.   $value = $url;         //二维码内容4 [" X+ W2 h: @  _/ g& y
  5.   $errorCorrectionLevel = 'L';  //容错级别
    8 H' R7 V% X% K1 i8 j, N4 J
  6.   $matrixPointSize = 5;      //生成图片大小
    ) u$ G+ l$ B; B* C/ f
  7.   //生成二维码图片  E' r) {) {/ H% J3 }
  8.   $QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);! @8 M) {3 c$ ^# `. C3 i
  9. }
    ( N2 ?/ ^4 }7 [7 ^" ?4 M
  10. //调用查看结果4 j3 S/ K2 S) h! y4 t2 P9 M5 w; n
  11. scerweima2('https://www.baidu.com');
    + g) W7 x& t; J3 F: W, Q! y
复制代码
前两种方法,每调用一次都会在本地生成一张二维码图片,第三种方法,不生成文件,会直接输出二维码到浏览器中。  J1 e0 D' J* Q% d8 H! l" Z8 Q3 `9 [
PS:这里再为大家推荐两款二维码相关在线工具供大家参考使用:
0 e* f8 _! G4 M* k" Z: F/ g在线生成二维码工具(加强版)  z+ F7 m1 D: v% v
http://tools.jb51.net/transcoding/jb51qrcode
! D0 N, V% d# i在线二维码解码识别工具1 Z3 P, B$ F& V* W; a
http://tools.jb51.net/transcoding/trans_qrcode' U) B% ]/ X3 q8 n4 }1 E9 I' x& `

2 p( q# M) t9 s3 [2 e  V$ A" ?1 I7 C) r/ Y

( |+ w+ w+ [# x7 f7 U4 f* ?3 A! s/ j. b" t/ I) c1 w, {- O
9 g4 t$ p" k5 j9 A  i" z

最新评论

GMT+8, 2026-10-11 23:07 , Processed in 0.061237 second(s), 20 queries .

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