#codec #no-std #semacode #codematrix

no-std datamatrix

使用优化编码器进行数据矩阵(ECC 200)解码和编码

11次发布

0.3.1 2024年6月17日
0.3.0 2022年2月13日
0.2.1 2021年7月11日
0.1.1 2021年5月24日
0.1.0-alpha.22021年1月31日

#255 in 编码

Download history 184/week @ 2024-05-02 198/week @ 2024-05-09 334/week @ 2024-05-16 63/week @ 2024-05-23 74/week @ 2024-05-30 87/week @ 2024-06-06 291/week @ 2024-06-13 88/week @ 2024-06-20 94/week @ 2024-06-27 76/week @ 2024-07-04 46/week @ 2024-07-11 47/week @ 2024-07-18 121/week @ 2024-07-25 115/week @ 2024-08-01 127/week @ 2024-08-08 146/week @ 2024-08-15

519 每月下载量

Apache-2.0 OR MIT

290KB
7K SLoC

datamatrix-rs

crates.io Documentation License Lines of Code

数据矩阵(ECC 200)解码和编码库,带有优化编码器。

Data Matrix encoding 'datamatrix-rs'

该库具有优化和线性时间编码器,可以实现最小的编码大小。

数据矩阵标准(ISO/IEC 16022:2006)包含一个启发式方法来决定使用哪种编码模式,在大多数情况下都有效。但是直接实现不会具有线性运行时间。该库使用类似于A*算法的想法。

优化器在这个实现中特别重要,大多数实现都使用启发式方法。有关其他开源数据矩阵库的引用和致谢,请参阅下面的相关项目列表。

示例

let code = DataMatrix::encode(
    b"Hello, World!",
    SymbolList::default(),
).unwrap();

// print an "ASCII art" version
print!("{}", code.bitmap().unicode());

该库包含生成其他输出格式的辅助函数。示例代码可在examples/中找到。对于这个最后渲染步骤的额外努力通常很低,并且这种方法允许很高的灵活性。

状态

  • 实现了ASCII、Base256、C40、Text、X12、EDIFACT编码模式。
  • 优化器可以在编码模式之间切换,以找到最小的编码大小。
  • 数据部分解码。
  • 模糊数据的解码和编码(48小时后无问题
  • 检查其他实现中的公开错误报告。
  • Reed Solomon 解/编码器。
  • 拼块放置编码。
  • 渲染辅助工具。
  • 实现ISO 21471中定义的扩展矩形数据矩阵(DMRE),它添加了更多的矩形符号大小。
  • 拼块放置解码。
  • 图像中的视觉检测。
  • 详细的解码器输出。
  • ECI支持。这是我能够做到的,而不必购买这些标准(数百美元)。

后续考虑的事项

  • "结构化附加"
  • "阅读器编程"

免责声明

由于编码数据被填充以填充数据矩阵符号中剩余的空间,因此该库生成的符号在许多情况下不会比基于规范中定义的启发式算法的优化器生成的符号更小。然而,它无论如何都实现了线性编码时间,并避免了归因于使用启发式算法的一些错误(请参阅zxing和OkapiBarcode中的公开错误)。当然,确实有一些情况下它将返回一个更小的符号,尽管承认还没有对此进行全面的研究。

以下项目在学习和实施过程中非常有价值,我们借鉴了一些测试用例和错误报告。

  • zxing 是一个 Google 库,用于编码和解码多种 1D 和 2D 码,包括 Data Matrix。核心部分是用 Java 编写的。它使用了规范中的启发式方法。
  • barcode4j 是 zxing 的前辈(?),Data Matrix 码后来被分叉到 zxing。
  • libdmtx 是编码和解码 Data Matrix 的最突出的开源 C 库。与规范相比,它的优化器功能更有限,但它也可以从图像中解码 Data Matrix 码。
  • zxing-cpp 是 zxing 的 C++ 版本,它也包含了一些改进。
  • OkapiBarcode 是一个支持 Data Matrix 编码的 Java 库,其中包含多种其他编码!其实现似乎遵循标准。
  • OkapiBarcode 是从(?)zint C 库移植过来的。它们网站上还提到了 Pascal 和 C# 的移植。题外话:有一些编码器可以用于一些漂亮的复古码和已停产的商用码,请参见网站上的“额外内容”。
  • postscriptbarcode 使用仅 PostScript 实现了多种 1D 和 2D 码的编码。它也可以作为 LaTeX 包使用。 JavaScript 版本
  • 一个用于编码的 perl 模块
  • iec16022 是一个由 Andrews & Arnold Ltd. 编写的 Data Matrix 编码器,但现在由 Reimar Döffinger 维护。它有一个类似的优化编码器。

依赖关系

~0.1–1MB
~31K SLoC