2 个版本 (1 个稳定版)
1.0.0 | 2024年6月8日 |
---|---|
0.1.0 | 2024年6月8日 |
#309 in 图像
每月248次下载
66KB
1.5K SLoC
QArt 代码生成器
在 Rust 中实现 QArt 代码。
安装(对于 GitHub)
此仓库作为 cargo 上的 crate 发布,可以使用 cargo install qart
安装。如果您没有 cargo 并且使用的是 Windows,请从发行版部分下载压缩的二进制文件并解压缩。
使用方法
此 crate 可以作为可执行文件和 cargo 项目的依赖项使用。有关使用说明,请运行 qart help
或 ./path/to/qart help
(如果已下载可执行文件)。如果作为依赖项安装,则将函数 qart::build
和 qart::preview
暴露给用户。
技巧
高对比度图像效果很好,ms paint 中的绘图尤其出色,尽管光线/暗平衡不良的图像通常在最高的二维码尺寸下无法正常工作。
亮度阈值值类似于摄影中的曝光,只是相反:值越高,黑色像素越多。
这些二维码具有低错误校正级别,以允许更多的绘制空间。因此,根据代码的不同,与标准二维码相比,扫描器可能需要更多的时间和更清晰的视角来扫描它们。
该软件包在保持二维码功能的同时,通过在提供的目标文本后附加URL片段来操纵二维码的外观。不幸的是,如果您只想编码文本或其他数据(除了URL),目标数据之后将会有一个庞大的数字字符串。有关此过程的更多信息,请参阅此处,该过程的创造者Russ Cox(Go语言的知名人士)对其进行了更详细的描述。然而,该文章并未涵盖技术细节,如果您正在寻找创建自己的实现,我已经尽可能详细地记录了该过程,以及实践允许的范围,所以请随意查看。
速度与其他实现对比
因为这个软件包是用Rust编写的,并且是多线程的,所以它比QArt代码的其他实现快了一个数量级。
以下所有内容我都能进行基准测试,除了Russ Cox的原始实现,因为它包含在一个网站上,并且二维码功能难以单独访问。
以下内容生成的是使用上面二维码中显示的源图像生成的v40二维码
- https://github.com/dieforfree/qart4j:14.16秒
- https://github.com/7sDream/pyqart:94.18秒
- qart:284.87毫秒
关于TODO事项的说明
如果您查看源代码,您会在其中看到大量的TODO注释。TODO列表上剩下的事情只有重构和潜在优化。由于我是Rust的新手,所以我不确定编译器对代码进行了多少优化,所以像移除未使用的向量分配和缓存这样的任务也在其中。到现在为止,尝试进行(技术)优化开始花费更长的时间,并且收益递减(最后一次尝试的优化破坏了代码,并使其变慢,所以我决定不值得这样做)。由于我并不真的关心这个软件包是否被其他人使用,继续处理TODO事项不会对任何人产生太多好处,所以我决定到此为止,并转向其他项目。
相关链接
依赖项
~13MB
~90K SLoC