21 个版本 (4 个稳定版)

2.0.0 2024 年 4 月 3 日
1.0.2 2020 年 9 月 9 日
1.0.1 2019 年 12 月 3 日
0.10.0 2018 年 2 月 28 日
0.3.4 2015 年 11 月 30 日

#26 in 图像

Download history 422/week @ 2024-04-18 531/week @ 2024-04-25 351/week @ 2024-05-02 541/week @ 2024-05-09 399/week @ 2024-05-16 279/week @ 2024-05-23 498/week @ 2024-05-30 451/week @ 2024-06-06 644/week @ 2024-06-13 341/week @ 2024-06-20 432/week @ 2024-06-27 341/week @ 2024-07-04 377/week @ 2024-07-11 382/week @ 2024-07-18 418/week @ 2024-07-25 425/week @ 2024-08-01

1,727 每月下载量
用于 4 crate

MIT/Apache

155KB
3.5K SLoC

Build Status Coverage Status MIT licensed Algorithmia

BARCODERS

Barcoders 是 Rust 编程语言的条码编码库。

Barcoders 允许您将所选条码符号的有效数据编码成底层二进制结构的 Vec<u8> 表示形式。从这里,您可以利用可选的内置生成器之一(用于导出到 SVG、GIF、PNG 等)或构建自己的生成器。

安装

仅编码功能(例如,如果您只想将 String 转换为二进制数字 Vec<u8>

[dependencies]
barcoders = "2.0.0"

如果您想以特定格式生成条码,请启用相应的功能

[dependencies]
barcoders = {version = "2.0.0", features = ["image", "ascii", "svg", "json"]}

每个生成器都是可选功能,因此您只需编译您想要使用的部分。有关您所需的生成功能相关的功能,请参见下面。

文档

文档和示例在此处可用.

当前支持

Barcoders 的最终目标是提供对所有主要(以及许多不太主要的)符号的支持。

符号

  • EAN-13
    • UPC-A
    • JAN
    • Bookland
  • EAN-8
  • EAN 补充
    • EAN-2
    • EAN-5
  • Code11
    • USD-8
  • Code39
  • Code93
  • Code128 (A, B, C)
  • Two-Of-Five
    • 交错 (ITF)
    • 标准 (STF)
  • Codabar
  • 更多即将推出!

生成器

  • ASCII (功能:ascii)
  • JSON (功能:json)
  • SVG (功能:svg)
  • PNG (功能:image)
  • GIF (功能:image)
  • WEBP (功能:image)
  • 图像缓冲区(功能:image
  • 或添加您自己的

示例

编码

extern crate barcoders;

use barcoders::sym::ean13::*;

// Each encoder accepts a String to be encoded. Valid data is barcode-specific
// and thus constructors return an Result<T, barcoders::error::Error>.
let barcode = EAN13::new("593456661897").unwrap();

// The `encode` method returns a Vec<u8> of the binary representation of the
// generated barcode. This is useful if you want to add your own generator.
let encoded: Vec<u8> = barcode.encode();

图像(GIF、WEBP、PNG)生成

extern crate barcoders;

use barcoders::sym::code39::*;
use barcoders::generators::image::*;
use std::io::prelude::*;
use std::io::BufWriter;
use std::fs::File;
use std::path::Path;

let barcode = Code39::new("1ISTHELONELIESTNUMBER").unwrap();
let png = Image::png(80); // You must specify the height in pixels.
let encoded = barcode.encode();

// Image generators return a Result<Vec<u8>, barcoders::error::Error) of encoded bytes.
let bytes = png.generate(&encoded[..]).unwrap();

// Which you can then save to disk.
let file = File::create(&Path::new("my_barcode.png")).unwrap();
let mut writer = BufWriter::new(file);
writer.write(&bytes[..]).unwrap();

// Generated file ↓ ↓ ↓

Code 39: 1ISTHELONELIESTNUMBER

您还可以请求image::RgbaImage,您可以自行操作

let barcode = Code39::new("BEELZEBUB").unwrap();
let buffer = Image::image_buffer(100);
let encoded = barcode.encode();
let img = buffer.generate_buffer(&encoded[..]).unwrap();

// Manipulate and save the image here...

您还可以通过指定结构体字段来指定条形码的x维、旋转、背景/前景颜色和透明度

let gif = Image::GIF{height: 80,
                     xdim: 1,
                     rotation: Rotation::Zero,
                     // Using non black/white colors is generally not recommended by most vendors, but barcoders makes it possible.
                     foreground: Color::new([255, 0, 0, 255]),
                     background: Color::new([0, 255, 20, 255])};

SVG生成

SVG与其他图像类型类似,但我将其作为一个独立的功能提供,因为它不需要第三方依赖。

extern crate barcoders;

use barcoders::sym::code39::*;
use barcoders::generators::svg::*;
use std::io::prelude::*;
use std::io::BufWriter;
use std::fs::File;
use std::path::Path;

let barcode = Code39::new("56DFU4A777H").unwrap();
let svg = SVG::new(200); // You must specify the height in pixels.
let encoded = barcode.encode();
let data: String = svg.generate(&encoded).unwrap();

let file = File::create(&Path::new("my_barcode.svg")).unwrap();
let mut writer = BufWriter::new(file);
writer.write(data.as_bytes()).unwrap();

您还可以通过指定结构体字段来指定条形码的x维、背景/前景颜色和透明度

let svg = SVG{height: 80,
              xdim: 1,
              // Using non black/white colors is generally not recommended by most vendors, but barcoders makes it possible.
              foreground: Color::black(),
              background: Color::new([0, 255, 20, 255])};

ASCII生成

ASCII生成器在测试目的上很有用。

extern crate barcoders;

use barcoders::sym::ean13::*;
use barcoders::generators::ascii::*;

let barcode = EAN13::new("750103131130").unwrap();
let encoded = barcode.encode();

let ascii = ASCII::new();
ascii.generate(&encoded[..]);

assert_eq!(ascii.unwrap(),
"
# # ##   # #  ###  ##  # #  ### #### # ##  ## # # #    # ##  ## ##  ## #    # ###  # ### #  # #
# # ##   # #  ###  ##  # #  ### #### # ##  ## # # #    # ##  ## ##  ## #    # ###  # ### #  # #
# # ##   # #  ###  ##  # #  ### #### # ##  ## # # #    # ##  ## ##  ## #    # ###  # ### #  # #
# # ##   # #  ###  ##  # #  ### #### # ##  ## # # #    # ##  ## ##  ## #    # ###  # ### #  # #
# # ##   # #  ###  ##  # #  ### #### # ##  ## # # #    # ##  ## ##  ## #    # ###  # ### #  # #
# # ##   # #  ###  ##  # #  ### #### # ##  ## # # #    # ##  ## ##  ## #    # ###  # ### #  # #
# # ##   # #  ###  ##  # #  ### #### # ##  ## # # #    # ##  ## ##  ## #    # ###  # ### #  # #
# # ##   # #  ###  ##  # #  ### #### # ##  ## # # #    # ##  ## ##  ## #    # ###  # ### #  # #
# # ##   # #  ###  ##  # #  ### #### # ##  ## # # #    # ##  ## ##  ## #    # ###  # ### #  # #
# # ##   # #  ###  ##  # #  ### #### # ##  ## # # #    # ##  ## ##  ## #    # ###  # ### #  # #
".trim());

JSON生成

这可能有助于以传统格式将编码数据传递给第三方系统。

extern crate barcoders;

use barcoders::sym::codabar::*;
use barcoders::generators::json::*;

let codabar = Codabar::new("A98B").unwrap();
let json = JSON::new();
let generated = json.generate(&codabar.encode()[..]);

assert_eq!(generated.unwrap(),
"
{
 \"height\": 10,
 \"xdim\": 1,
 \"encoding\": [1,0,1,1,0,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,0,1,0,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,1]
}
"

测试

注意,如果您想将实际的图像/svg文件输出到文件系统以进行视觉确认,请在适当的测试模块中设置WRITE_TO_FILE变量。

完整套件

$ cargo test --features="image svg ascii json"

仅编码

$ cargo test

许可证

在以下任一许可证下许可:

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在作品中的任何贡献,应按上述方式双重许可,无需任何附加条款或条件。

依赖项

~0–495KB