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 图像
1,727 每月下载量
用于 4 crate
155KB
3.5K SLoC
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 ↓ ↓ ↓
您还可以请求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 License,版本2.0,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在作品中的任何贡献,应按上述方式双重许可,无需任何附加条款或条件。
依赖项
~0–495KB