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 图像

Download history 502/week @ 2024-05-03 609/week @ 2024-05-10 631/week @ 2024-05-17 645/week @ 2024-05-24 787/week @ 2024-05-31 1018/week @ 2024-06-07 892/week @ 2024-06-14 802/week @ 2024-06-21 1056/week @ 2024-06-28 1363/week @ 2024-07-05 573/week @ 2024-07-12 1315/week @ 2024-07-19 1558/week @ 2024-07-26 1434/week @ 2024-08-02 1347/week @ 2024-08-09 1000/week @ 2024-08-16

5,813 每月下载量
用于 3 crate

Apache-2.0

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.0v.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_readsvg_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