艺术二维码 QArt Codes

2016-08-06 11:38:03 +08:00
 7sDream

介绍

呼,这个很久之前定的目标今天终于差不多算写出来了。

几个月之前发现了一篇文章,是 Russ Cox 写的一篇关于将二维码与图片结合的,我觉得很好玩就准备动手实现。

其实已经有了其他实现的,我记得代码家的微博好像还推荐过,就是这个:https://github.com/dieforfree/qart4j

所以可能很多人都知道这个东西了,我读完 qart4j 的代码( QwQ ,好难读,没注释,而且我还不会 Java )之后开始用 Python 实现我自己的版本,其他的就不多说了,看几个例子:

例子

扫描这个二维码就能打开 V2EX 的首页啦~~

这个是我的 Github

这个是 bilibili

啊对了,需要说明的是,二维码的编码部分也是我自己写的,没有调用库,独立出来了一个 pyqr 的 cli 用于生成普通的二维码,使用效果大概是这样:

当然,也是可以生成图片的,加个 -o 参数就好

pyqart 的 cli 也支持打印在 terminal 里的,例子:

其他的细节看 Readme 吧,pyqr -hpyqart -h 可以查看更多帮助。

原理

因为有点复杂我就不在帖子里说了,涉及到二维码的编码规范和里德所罗门纠错码之类的东西,大家可以暂时看上面那篇算法提出者写的文章,有可能以后我会写一系列文章仔细说明这个实现。

代码

代码在这: https://github.com/7sDream/pyqart

扫描下面这个二维码也可以访问:

我的其他项目可以在 Github 上看……除了那两个最先的 piano 项目,其他的都挺好玩儿的……

额外

额,开学就大四了,然而工作和实习都并没有着落…………

听说阿里今年几乎就不怎么找人,加上它们也没啥 Py 岗……估计是没戏了。 腾讯扔了个简历至今没回应。 网易那个笔试简直了……算法题死活交不上,最后放弃了

未来迷茫中…………

目前座标天津,大四一年准备尽量出去实习吧,有没有什么北京的公司招 Py 实习的,可以联系一下。还有就是毕业以后的工作,有没有公司要的?

以上,谢谢阅读。

22637 次点击
所在节点    Python
102 条回复
xcodebuild
2016-08-06 11:43:15 +08:00
看着论文就实现出来了简直 6 的不行
Sakuramiku
2016-08-06 11:45:18 +08:00
不愧是我 77..
7sDream
2016-08-06 11:45:24 +08:00
@codefalling 还是参考了原作者的实现和 java 的实现的……
designer
2016-08-06 11:54:25 +08:00
虽然这个早就有了但是还是要支持一下!
zhujinliang
2016-08-06 11:54:51 +08:00
赞!比二维码中间抠个洞的做法高到不知哪里去了
7sDream
2016-08-06 11:55:56 +08:00
@designer 是的,自己实现一下搞懂原理也挺好~
7sDream
2016-08-06 11:56:12 +08:00
@zhujinliang

OvO 谢谢支持~
kylinking
2016-08-06 12:07:26 +08:00
可以,支持一下~
sobigfish
2016-08-06 12:22:57 +08:00
url 里 #后面的是故意的还是编码的问题 anyway 很牛
7sDream
2016-08-06 12:25:15 +08:00
@sobigfish

故意的,因为总要有数据把二维码填满才能做到控制二维码的样子呀,基本原理就是改变这一串锚点来拟合成目标图片。可以看原作者的文章了解原理~~
ynyounuo
2016-08-06 12:42:10 +08:00
@7sDream
不知道这种能不能用代码实现
ahonn
2016-08-06 12:48:34 +08:00
77 真棒
7sDream
2016-08-06 12:56:29 +08:00
@ynyounuo

这个……难度就有点大了…估计是利用了二维码扫描软件的一些特性 比如点不一定需要是正方形…颜色也不用相同等等…需要针对生成的二维码单独设计吧…而且还是动图…纯用代码估计悬
Jaylee
2016-08-06 13:39:14 +08:00
@ahonn 这个好厉害
meunicorn
2016-08-06 13:44:10 +08:00
好强。。。
iLionel
2016-08-06 13:47:26 +08:00
应该是叫做 Halftone QR Codes
7sDream
2016-08-06 13:49:23 +08:00
@meunicorn

其实原理的提出者才是真的强~我只是写了个实现而已
7sDream
2016-08-06 13:49:46 +08:00
@iLionel

http://research.swtch.com/qart

原作者的文章里定了名字咯~~没办法呀
UnisandK
2016-08-06 13:51:11 +08:00
https://github.com/chinuno-usami/CuteR
这个更好看,可以读读代码
7sDream
2016-08-06 14:04:46 +08:00
@UnisandK

我看了一下图,原理不一样。

注意它的图片里,左上,右上和左下这几个定位图形,外边框的黑色块是标准的 一个点 应该占的宽度。

再看图片里面的哪些小的黑点,明显大小是不一样的。

我猜想它的原理应该是这样,先正常生成一张二维码,然后根据图片的二值化数据,来吧原来的二维码进行修改。比如一个黑点所占的地方,在图片里应该是白色,它就把这个点分为 9 份,中间的留黑,周围变白。而扫描仪扫描的时候先按点应该的大小扫到这个点,然后优先判断中心部分的颜色。所以变化后的二维码还能扫描出来。

这个思路也很不错来着~~我下午去看看代码,看跟我想的一样不……

话说给我二维码上色这个我也准备写来着~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/297531

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX