28 个版本

0.12.5 2024年5月15日
0.12.3 2024年4月28日
0.12.1 2024年3月12日
0.11.0 2023年12月30日
0.3.1 2022年4月12日

#33 in 图像

Download history 624/week @ 2024-05-04 850/week @ 2024-05-11 536/week @ 2024-05-18 536/week @ 2024-05-25 328/week @ 2024-06-01 1282/week @ 2024-06-08 386/week @ 2024-06-15 598/week @ 2024-06-22 472/week @ 2024-06-29 476/week @ 2024-07-06 630/week @ 2024-07-13 470/week @ 2024-07-20 746/week @ 2024-07-27 566/week @ 2024-08-03 530/week @ 2024-08-10 583/week @ 2024-08-17

2,495 每月下载量
用于 10 个crate (8 直接)

自定义许可

470KB
9K SLoC

Example qr for website example.com

fast_qr 的速度大约是 qrcode 的 6-7 倍,见 基准测试

您可以将二维码创建为

  • 原始矩阵,适用于自定义使用
  • 矢量化图像,适用于网络使用
  • 图像,适用于移动/打印使用

用法

Rust

示例

您可以使用以下命令运行示例

cargo run --example simple
cargo run --example svg -F svg
cargo run --example image -F image

它们都在下面详细解释。

QRCode 转换为 Unicode

use fast_qr::convert::ConvertError;
use fast_qr::qr::QRBuilder;

fn main() -> Result<(), ConvertError> {
    // QRBuilder::new can fail if content is too big for version,
    // please check before unwrapping.
    let qrcode = QRBuilder::new("https://example.com/")
        .build()
        .unwrap();

    let str = qrcode.to_str(); // .print() exists
    println!("{}", str);

    Ok(())
}

QRCode 转换为 SVG docs.rs

注意:它需要 svg 功能

use fast_qr::convert::ConvertError;
use fast_qr::convert::{svg::SvgBuilder, Builder, Shape};
use fast_qr::qr::QRBuilder;

fn main() -> Result<(), ConvertError> {
    // QRBuilder::new can fail if content is too big for version,
    // please check before unwrapping.
    let qrcode = QRBuilder::new("https://example.com/")
        .build()
        .unwrap();

    let _svg = SvgBuilder::default()
        .shape(Shape::RoundedSquare)
        .to_file(&qrcode, "out.svg");

    Ok(())
}

QRCode 转换为图像 docs.rs

注意:它需要 image 功能

use fast_qr::convert::ConvertError;
use fast_qr::convert::{image::ImageBuilder, Builder, Shape};
use fast_qr::qr::QRBuilder;

fn main() -> Result<(), ConvertError> {
    // QRBuilder::new can fail if content is too big for version,
    // please check before unwrapping.
    let qrcode = QRBuilder::new("https://example.com/")
        .build()
        .unwrap();

    let _img = ImageBuilder::default()
        .shape(Shape::RoundedSquare)
        .background_color([255, 255, 255, 0]) // Handles transparency
        .fit_width(600)
        .to_file(&qrcode, "out.png");

    Ok(())
}

JavaScript / TypeScript

安装

npm install --save fast_qr
# Or
yarn add fast_qr

创建一个 svg

/// Once `init` is called, `qr_svg` can be called any number of times
import init, { qr_svg, SvgOptions, Shape } from '/pkg/fast_qr.js'

const options = new SvgOptions()
  .margin(4)
  .shape(Shape.Square)
  .image("")  // Can be a URL or a base64 encoded image
  .background_color("#b8a4e5")
  .module_color("#ffffff");

// Using then / catch:
init()
  .then(() => {
    for (let i = 0; i < 10; i++) {
      const svg = qr_svg("https://fast-qr.com", options);
      console.log(svg);
    }
  })
  .catch(console.error);

// Or using modern async await:
await init();
for (let i = 0; i < 10; i++) {
  const svg = qr_svg("https://fast-qr.com", options);
  console.log(svg);
}

构建 WASM

WASM 模块也存在于 NPM 注册表中

包名为 fast_qr,可以按如下方式安装

npm install --save fast_qr

WASM 模块可能已捆绑

在最新的 发布版 中找到捆绑版本。

可以从源代码构建 WASM 模块

./wasm-pack.sh # Runs build in release mode and wasm-opt twice again
wasm-pack pack pkg # Creates an archive of said package
# wasm-pack publish pkg # Creates an archive & publish it to npm

基准测试

根据以下基准测试,fast_qr 的速度大约是 qrcode 的 6-7 倍。

基准测试 较低 估计 较高
V03H/qrcode 524.30 us 535.02 us 547.13 us
V03H/fast_qr 82.079 us 82.189 us 82.318 us fast_qr 快 6.51 倍
V10H/qrcode 2.1105 ms 2.1145 ms 2.1186 ms
V10H/fast_qr 268.70 us 269.28 us 269.85 us fast_qr 快 7.85 倍
V40H/qrcode 18.000 ms 18.037 ms 18.074 ms
V40H/fast_qr 2.4313 ms 2.4362 毫秒 2.4411 毫秒 fast_qr 的速度是 7.40 倍

更多基准测试可以在 /benches 文件夹 中找到。

依赖关系

~0–0.8MB
~17K SLoC