56 个版本
0.6.1 | 2024 年 8 月 1 日 |
---|---|
0.6.0 | 2024 年 7 月 31 日 |
0.5.20 | 2024 年 7 月 24 日 |
0.5.9 | 2024 年 3 月 24 日 |
0.1.3 | 2022 年 12 月 31 日 |
#29 in 图像
5,813 每月下载量
用于 3 crate
3MB
57K SLoC
rxing - cRustacean Crossing
这是将 ZXing (https://github.com/zxing/zxing) Java 条形码库移植到纯 Rust 的版本。转换是通过手工完成的。原始许可协议归 zxing 的作者所有。
测试库的移植尚未完成。目前所有正面测试都已实现。负验证测试尚未实现。
移植工作是在 Rust 语言的基础上进行的,尽管一些部分可能比合适的 Rust 重新实现更接近 Java。代码“Rust化”的过程正在进行中。
命令行界面 (CLI)
如果您正在寻找库的命令行界面,请参阅 rxing-cli。
在线
在线演示可在 scan.rxing.org 获得。
WebAssembly (WASM)
如果您需要此库的 WASM 版本,请查看 rxing-wasm 或在 NPM 上。
最小 Rust 版本
当前使用最低的 Rust 版本为 1.69。低于该版本的版本未经测试,可能无法编译或按预期运行。
状态
所有条形码格式都已测试,并且在其当前状态下与当前测试正常工作。
符号 | 状态 | 编码 | 解码 |
---|---|---|---|
aztec | 完整 | 是 | 是 |
datamatrix | 完整 | 是 | 是 |
maxicode | 完整 | 否 | 是 |
pdf417 | 完整 | 是 | 是 |
qrcode | 完整 | 是 | 是 |
coda | 完整 | 是 | 是 |
code 39 | 完整 | 是 | 是 |
code 93 | 完整 | 是 | 是 |
code 128 | 完整 | 是 | 是 |
itf | 完整 | 是 | 是 |
ean 8 | 完整 | 是 | 是 |
ean 13 | 完整 | 是 | 是 |
upc a | 完整 | 是 | 是 |
upc e | 完整 | 是 | 是 |
rss-14 | 完整 | 否 | 是 |
rss-expanded | 完整 | 否 | 是 |
telepen | 完整 | 是 | 是 |
micro qr | 完整 | 否 | 是 |
rMQR | 完整 | 否 | 是 |
请注意,目前支持 UPC/EAN 扩展 2/5。
功能标志
以下功能标志可用
-
image
:启用图像操作和读取所需的功能。 -
image_formats
:默认启用。编译所有image
crate 图像格式支持选项。 -
allow_forced_iso_ied_18004_compliance
:允许强制 ISO/IED 18004 兼容性。除非特别需要,否则请禁用。 -
client_support
:启用客户端库。这用于解析条形码的结果。 -
svg_write
:启用写入SVG文件的支持。 -
svg_read
:启用读取SVG文件的支持。 -
wasm_support
:对WASM模块构建进行某些更改以支持此模块。 -
experimental_features
:启用实验性功能,风险较大。 -
serde
:为外部结构体添加了serde序列化和反序列化支持。 -
otsu_level
:添加了otsu级别二值化器。这不会被任何辅助函数使用,您必须在设置新解码器时专门使用它。《OtsuLevelBinarizer》未经过充分测试,且未通过当前测试套件。仅在您知道为何想要使用它时才考虑此选项。在许多情况下,标准二值化器可能更好。如果您有非常特定的用例,并且知道输入数据将是什么样的,您应该考虑实现自己的《Binarizer》并使用它。
默认功能集包括上述的《image》、《client_support》和《image_formats》功能。
不完整
该库仅与《BufferedImageLuminanceSource》源格式进行了彻底测试。目前使用其他任何源都是实验性的,可能会导致意外的或未定义的输出。这意味着用于启用《image》crate使用的功能标志默认是开启的。《Luma8LuminanceSource》是第二好的测试库,是库的基于WASM的包装的基础。如果希望在关闭《image》功能的情况下构建crate,请考虑《Luma8LuminanceSource》作为一个合理的选择。
使用辅助函数的示例
use rxing;
fn main() {
let file_name = "test_image.jpg";
let results = rxing::helpers::detect_multiple_in_file(file_name).expect("decodes");
for result in results {
println!("{} -> {}", result.getBarcodeFormat(), result.getText())
}
}
最新发布说明
-
v0.6.1 -> 初始支持不可变符号读取器。修复了rss_expanded读取器的问题。
不可变读取器:许多二维读取器现在实现了《ImmutableReader》特质。这使得它们可以使用《immutable_decode》和《immutable_decode_with_hints》方法进行调用。相应的读取器无需声明为《mut》即可正确运行。请注意,并非所有读取器都支持此特质。最值得注意的是,《MultiFormatReader》、《MultiUseMultiFormatReader》、《FilteredImageReader》和《MultiFormatOneDReader》没有实现《ImmutableReader》。这是因为这些读取器都需要存储一些状态。目前正在减少此列表。此更改还允许符号读取器在《Lazy static》上下文中工作,而无需《unsafe》。
示例
static LAZY_STATIC_QR_READER: Lazy<QRCodeReader> = Lazy::new(QRCodeReader::default); fn main() { let result = LAZY_STATIC_QR_READER.immutable_decode( &mut BinaryBitmap::new( HybridBinarizer::new( Luma8LuminanceSource::new(luma_data, width, height), ))); }
-
v0.6.0 -> rxing现在是线程安全的。如果您正在使用《PointCallback》/《RXingResultPointCallback》或《RXingResultMetadataValue》的《Pdf417ExtraMetadata》字段,则这是一个破坏性更改。此外,在许多情况下从使用《Rc》和《Arc》移除后,应该有一些小的性能改进。
-
v0.5.8 -> 性能改进。内存改进。添加了《FilteredReader》,它在图像上执行更复杂的操作(调整大小并关闭二进制位图),以牺牲一些性能为代价。
-
v0.5.5 -> 添加对rMQR的支持,允许在没有image_formats的情况下构建库,修复了多个条形码检测的问题。
新默认功能标志
image_formats
启用所有image
集装箱图像格式供使用。rMQR 支持是基本的,并在纯条形码上最为有效。之前的GenericMultipleBarcodeReader
版本使用条形码内容作为唯一性的确定因素。这是不正确的,新版本试图通过检测它们是否嵌套在一起来消除重复。 -
v0.5.0 -> 感谢首次贡献者 cpwood 的工作,添加了对 telepen 的支持。
此版本还添加了排除构建 "客户端" 结果解析功能的能力。目前,这些功能是默认功能集的一部分,可以通过
client_support
功能禁用。此版本修复了与chrono
集装箱相关的一些构建问题以及一些已弃用函数的消息。此更改仅影响使用client_support
功能构建的用户。 -
v0.4.6 -> 修复了 pdf417 空白、旋转和压缩的问题。感谢 GitHub 用户 agkyunromb 的首次贡献。
-
v0.4.4 -> QRCode 支持的重大更新。
已集成 ZXing-Cpp QRCode 库。这为 QRCodes 的检测和解码带来了重大改进。这也带来了检测和解码 MicroQRCodes 的能力。此版本还更新了默认的二值化器,应该会更快、更可靠。
-
v0.4.0 -> 重写了 API 以实现泛型。这基本上消除了库中的动态分派。
此版本有许多底层的更改:更好的 Point 类,更好的错误处理,通过动态改进 API 的人机工程学。要了解新 API 的工作方式,请查看
helper
函数。此版本由 Asha20 和 SteveCookTU 的 PR 实现。非常感谢他们。此版本没有 ZXing-CPP 库的改进 QRCode 支持,因为该移植仍在进行中。 -
v0.3.1 -> 在 NEEDS_RESULT_CALLBACK 中支持闭包。在 v0.3.0 和 v.0.3.1 之间进行了多次代码清理。rxing 已移动到 https://github.com/rxing-core/rxing。
-
v0.2.21 -> 添加了对检测和解码旋转 MaxiCode 符号的局部支持。添加了对使用 serde(在
serde
功能之后)序列化许多面向公众的数据类型的支持。旋转检测不再受
experimental_features
标志的限制。MaxiCode 的旋转很简单。当前测试在旋转 90 度时检测到大约 50% 的代码。倾斜 MaxiCode 的检测现在在experimental_features
之下。 -
v0.2.20 -> 添加了对 MaxiCode 检测的基本支持。检测器在平面上的非旋转图像上工作最佳。基本的旋转校正支持受
experimental_features
标志限制,但尚未准备好用于大多数用例。MaxiCode 检测器受TryHarder
解码器提示限制,默认情况下,rxing 使用旧的PureBarcode
实现。 -
v0.2.19 -> 已将 zxing 的 c++ 版本的 datamatrix 检测器移植过来。这采用了一种与 datamatrix 符号检测截然不同的方法。如果您想回退到原始版本,请包含解码提示 TRY_HARDER。
-
v0.2.15 -> 通过功能标志
svg_read
和svg_write
支持读取和写入 svg 文件。这些标志默认是关闭的。
-
v0.2.14 -> 支持更多图像输出格式,对代码库进行了许多 rustification 更改。
如果您在编码器/解码器部分使用非常深入、特定的函数,可能需要重命名函数。例如,
qrcode::encoder::encoder
现在变为qrcode::encoder::qrcode_encoder
。 -
v0.2.10 -> 修复二维码生成的主要问题。
-
v0.2.9 -> 修复主问题,多格式编写器未对 codabar 进行编码。
-
v0.2.6 -> 修复 rss14 缺少结果点回调。
-
v0.2.4 -> 添加常见情况的辅助函数(读取文件、使用原始 luma8 数据)。
-
v0.2.3 -> 实现大多数来自 clippy 的建议,以及一些简单更改,没有表面更改。
-
v0.2.0 -> 显著提高裁剪 BufferedImageLuminanceSource 的性能。
-
v0.1.4 -> 显著提高 MultiFormatReader 和多个条码检测的性能。
已知问题
- GenericMultipleBarcodeReader 的性能较慢。
数据矩阵代码有时无法正确解码,尤其是在它们实际上是纯条码时。这似乎是 zxing 3.5.1 的问题。此问题已在 v0.2.19 中通过移植 ZXing-C++ 数据矩阵模块得到解决。
ZXing Track
目前跟踪 zxing 3.5.1
版权声明
原始许可/版权属于 zxing 开发者。适用于已移植组件的许可/版权属于该移植的开发者。
依赖项
~9–16MB
~289K SLoC