#qrcode #codes #image #encode #pattern #cox

bin+lib qart

将图像编码为二维码

2 个版本 (1 个稳定版)

1.0.0 2024年6月8日
0.1.0 2024年6月8日

#309 in 图像

Download history 235/week @ 2024-06-07 13/week @ 2024-06-14

每月248次下载

自定义许可

66KB
1.5K SLoC

QArt 代码生成器

在 Rust 中实现 QArt 代码

qr code with a pattern that looks like a cat

安装(对于 GitHub)

此仓库作为 cargo 上的 crate 发布,可以使用 cargo install qart 安装。如果您没有 cargo 并且使用的是 Windows,请从发行版部分下载压缩的二进制文件并解压缩。

使用方法

此 crate 可以作为可执行文件和 cargo 项目的依赖项使用。有关使用说明,请运行 qart help./path/to/qart help(如果已下载可执行文件)。如果作为依赖项安装,则将函数 qart::buildqart::preview 暴露给用户。

技巧

高对比度图像效果很好,ms paint 中的绘图尤其出色,尽管光线/暗平衡不良的图像通常在最高的二维码尺寸下无法正常工作。

亮度阈值值类似于摄影中的曝光,只是相反:值越高,黑色像素越多。

这些二维码具有低错误校正级别,以允许更多的绘制空间。因此,根据代码的不同,与标准二维码相比,扫描器可能需要更多的时间和更清晰的视角来扫描它们。

该软件包在保持二维码功能的同时,通过在提供的目标文本后附加URL片段来操纵二维码的外观。不幸的是,如果您只想编码文本或其他数据(除了URL),目标数据之后将会有一个庞大的数字字符串。有关此过程的更多信息,请参阅此处,该过程的创造者Russ Cox(Go语言的知名人士)对其进行了更详细的描述。然而,该文章并未涵盖技术细节,如果您正在寻找创建自己的实现,我已经尽可能详细地记录了该过程,以及实践允许的范围,所以请随意查看。

速度与其他实现对比

因为这个软件包是用Rust编写的,并且是多线程的,所以它比QArt代码的其他实现快了一个数量级。

以下所有内容我都能进行基准测试,除了Russ Cox的原始实现,因为它包含在一个网站上,并且二维码功能难以单独访问。

以下内容生成的是使用上面二维码中显示的源图像生成的v40二维码

关于TODO事项的说明

如果您查看源代码,您会在其中看到大量的TODO注释。TODO列表上剩下的事情只有重构和潜在优化。由于我是Rust的新手,所以我不确定编译器对代码进行了多少优化,所以像移除未使用的向量分配和缓存这样的任务也在其中。到现在为止,尝试进行(技术)优化开始花费更长的时间,并且收益递减(最后一次尝试的优化破坏了代码,并使其变慢,所以我决定不值得这样做)。由于我并不真的关心这个软件包是否被其他人使用,继续处理TODO事项不会对任何人产生太多好处,所以我决定到此为止,并转向其他项目。

依赖项

~13MB
~90K SLoC