V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sylnsfar
V2EX  ›  Python

Python qr code:可生成图片二维码、动态图二维码

  •  7
     
  •   sylnsfar ·
    sylnsfar · 2016-09-05 11:51:47 +08:00 · 19282 次点击
    这是一个创建于 3003 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Github 地址: https://github.com/sylnsfar/qrcode

    ***介绍***

    以前在别人博客上看到过一些带有图片的二维码,感兴趣且作为练习就自己实现了一个生成器:包括根据其原理实现生成普通二维码,以及参考了 [Halftone QR Code] 加入图片。

    目前的版本可以自己控制大小、容错率、(有图片的话)图片的对比度、亮度和色彩模式。
    具体用法在 Github 的 README 里。

    ***五种示例***

    一 普通二维码


    二 黑白静态二维码


    三 彩色静态二维码



    四 黑白动态二维码


    五 彩色动态二维码



    项目地址: https://github.com/sylnsfar/qrcode
    想听听大家的意见
    第 1 条附言  ·  2016-09-05 13:17:00 +08:00
    多谢 @em2046 的提醒,更新了代码,之前保存的图片虽然扫起来没问题,但边缘会有些奇怪的颜色,现在已经修复了。
    old:


    new:
    第 2 条附言  ·  2016-09-06 20:55:09 +08:00
    *更新:新增 exe 文件

    今天因为某个 v2er 的疑问(不懂 Python 且想要更简便地使用),我改写代码并打包了一个 EXE 文件。
    用起来更方便了,只要写好文本然后双击等待,并且不需要装 Python 。
    但生成效率可能每个电脑有区别。
    希望大家试用后给点评价
    Github : https://github.com/sylnsfar/qrcode_win
    第 3 条附言  ·  2016-09-08 14:14:47 +08:00
    *更新 2 :新增网页版

    链接: http://www.amazing-qrcode.com/
    是一位叫 Maras Chen 的网友写的。
    已经加入了 Github 的更新中。
    64 条回复    2016-11-10 11:59:08 +08:00
    wyntergreg
        1
    wyntergreg  
       2016-09-05 12:07:26 +08:00
    之前用过一个,没这个高大上,好评!
    sylnsfar
        2
    sylnsfar  
    OP
       2016-09-05 12:26:39 +08:00
    @wyntergreg 谢谢称赞
    em2046
        3
    em2046  
       2016-09-05 12:47:02 +08:00
    支持输出 PNG 吗
    ethanlu
        4
    ethanlu  
       2016-09-05 13:00:46 +08:00
    感谢楼主!非常好用!有个问题,如果是一个微信公众号的话要怎么用这个来整合?
    sylnsfar
        5
    sylnsfar  
    OP
       2016-09-05 13:05:08 +08:00
    @em2046 修改了,现在都保存为更高画质的.png 格式( and 感谢提醒!这样就修复了之前为.jpg 格式时的一些画质问题)
    zixianlei
        6
    zixianlei  
       2016-09-05 13:23:05 +08:00
    这个牛逼啊
    7sDream
        7
    7sDream  
       2016-09-05 13:31:43 +08:00
    666666

    虽然我也写过一个差不多的,但是原理不一样,用的不是一个算法~

    https://github.com/7sDream/pyqart
    robinlovemaggie
        8
    robinlovemaggie  
       2016-09-05 13:38:36 +08:00
    有时间的话做个 py2 兼容吧
    GTim
        9
    GTim  
       2016-09-05 13:39:40 +08:00
    谢谢楼主,已赞
    sylnsfar
        10
    sylnsfar  
    OP
       2016-09-05 13:42:15 +08:00   ❤️ 1
    @ethanlu 不太懂公众号,但刚刚试了一下,你可以先生成原版的二维码,然后利用在线扫码网站去扫出链接,利用这个链接就可以了。效果如下:
    sylnsfar
        11
    sylnsfar  
    OP
       2016-09-05 13:44:06 +08:00
    @zixianlei @GTim 谢谢
    ethanlu
        12
    ethanlu  
       2016-09-05 13:46:55 +08:00
    @sylnsfar 搞定!完美!!!
    sylnsfar
        13
    sylnsfar  
    OP
       2016-09-05 13:55:16 +08:00
    @7sDream 这是参考 Halftone QR Code 的,但严格点说应该不属于 Halftone ,只是近似吧。
    wolfan
        14
    wolfan  
       2016-09-05 14:00:18 +08:00
    太高大上了。
    sylnsfar
        15
    sylnsfar  
    OP
       2016-09-05 14:01:17 +08:00
    @robinlovemaggie 有这打算,但学习 Python 不久,对 Py2 完全不懂,有点难啊。
    sylnsfar
        16
    sylnsfar  
    OP
       2016-09-05 14:02:51 +08:00
    @wolfan 谢谢
    a87150
        17
    a87150  
       2016-09-05 14:10:56 +08:00
    @robinlovemaggie 这个就是 py2 的吧,我 3.52 根本装不了 pil
    7sDream
        18
    7sDream  
       2016-09-05 14:16:23 +08:00
    @sylnsfar

    恩,我们那天也讨论了一下这个算法,详见: https://www.v2ex.com/t/297531

    我的算法来源是这个: http://research.swtch.com/qart
    7sDream
        19
    7sDream  
       2016-09-05 14:18:36 +08:00
    @sylnsfar

    具体参见这一楼,虽然不知道我分析的对不对: https://www.v2ex.com/t/297531#r_3439424
    sylnsfar
        20
    sylnsfar  
    OP
       2016-09-05 14:27:49 +08:00
    @a87150 装 pillow
    sylnsfar
        21
    sylnsfar  
    OP
       2016-09-05 14:39:18 +08:00
    @7sDream 你那个主题我之前看过了,也让我开始动手去实现这个之前就想做的东西。
    你发的算法来源我一直打不开,不然我可能也会用那种算法吧。
    而你那个分析,和我对那篇论文的大概理解一样(并未完全看懂)。
    7sDream
        22
    7sDream  
       2016-09-05 14:41:20 +08:00
    @sylnsfar

    嗯嗯~~写项目好玩就行 OvO
    imcocc
        23
    imcocc  
       2016-09-05 14:45:42 +08:00 via iPhone
    太震撼了,可以动态背景
    jiezhi
        24
    jiezhi  
       2016-09-05 14:57:43 +08:00
    sylnsfar
        25
    sylnsfar  
    OP
       2016-09-05 15:56:52 +08:00
    @imcocc @jiezhi 谢谢
    creaer
        26
    creaer  
       2016-09-05 16:21:52 +08:00 via Android
    厉害啊
    designer
        27
    designer  
       2016-09-05 16:23:32 +08:00
    这么好的项目果断收藏!非常感谢
    sylnsfar
        28
    sylnsfar  
    OP
       2016-09-05 18:39:15 +08:00
    @creaer @designer thanks
    toou123
        29
    toou123  
       2016-09-05 18:47:31 +08:00
    点赞!
    xiahei
        30
    xiahei  
       2016-09-05 18:48:11 +08:00
    要是支持命令行直接打印就完美了,赞!
    chinuno
        31
    chinuno  
       2016-09-05 18:52:06 +08:00 via Android
    imageio 。又学到了一个方便的库了
    thinker3
        32
    thinker3  
       2016-09-05 20:24:40 +08:00
    @xiahei 我也需要直接在 terminal 输出的
    xiahei
        33
    xiahei  
       2016-09-05 20:32:56 +08:00
    @thinker3 Linux 下暂时用 qrencode 解决了, Windows 就没辙了。 qrencode 很不错。
    sylnsfar
        34
    sylnsfar  
    OP
       2016-09-05 21:00:07 +08:00
    @toou123 谢谢
    sylnsfar
        35
    sylnsfar  
    OP
       2016-09-05 21:01:19 +08:00
    @xiahei @thinker3 不太懂效果是怎样?图片转字符画?
    sylnsfar
        36
    sylnsfar  
    OP
       2016-09-05 21:02:51 +08:00
    @chinuno 嗯 是挺方便的。
    buildops
        37
    buildops  
       2016-09-05 22:32:39 +08:00
    收藏了,谢谢 lz
    bomb77
        38
    bomb77  
       2016-09-05 22:42:47 +08:00
    厉害,顶一个
    irory
        39
    irory  
       2016-09-05 23:06:10 +08:00 via iPhone
    mark 、改天试试!👍
    mingyun
        40
    mingyun  
       2016-09-05 23:30:52 +08:00
    $ pip install PIL
    Collecting PIL
    Could not find a version that satisfies the requirement PIL (from versions: )No matching distribution found for PIL
    sylnsfar
        41
    sylnsfar  
    OP
       2016-09-05 23:54:21 +08:00
    @mingyun 你用的是 Python 几? 3 的话装 Pillow
    sylnsfar
        42
    sylnsfar  
    OP
       2016-09-05 23:54:50 +08:00
    @buildops @bomb77 @irory 多谢支持
    liteneo
        43
    liteneo  
       2016-09-05 23:59:06 +08:00 via Android
    creaer
        44
    creaer  
       2016-09-06 00:38:02 +08:00 via Android
    @mingyun pillow
    maskerTUI
        45
    maskerTUI  
       2016-09-06 00:41:04 +08:00 via Android
    这样的二维码明显逼格高了几个档次啊
    pein
        46
    pein  
       2016-09-06 09:14:48 +08:00
    不明觉厉啊!
    linuxchild
        47
    linuxchild  
       2016-09-06 10:04:36 +08:00 via iPhone
    @imcocc 记得在微博看到过,闪的频率不是很高的相机就可以识别,类似于人眼的视觉存留。不知道有没有记错
    ximan
        48
    ximan  
       2016-09-06 10:08:51 +08:00
    如果有在线生成网址就更好啦
    sylnsfar
        49
    sylnsfar  
    OP
       2016-09-06 12:40:37 +08:00
    @maskerTUI @pein 多谢支持

    @ximan 额。我暂时没有
    Ncer
        50
    Ncer  
       2016-09-06 13:38:21 +08:00
    为啥我生成的好多张都不行……偶然出现一张可以的
    Ncer
        51
    Ncer  
       2016-09-06 13:55:07 +08:00
    可以了……图太大要保存到手机里扫描……
    0x5010
        52
    0x5010  
       2016-09-06 14:00:45 +08:00
    mylibs/matrix.py", line 106, in place_bits
    m[i][j] = next(bit)
    StopIteration


    求解。试了换图片也不行
    0x5010
        53
    0x5010  
       2016-09-06 14:53:53 +08:00
    @0x5010 是在使用微信链接的时候出错的 试了其他 url 可以
    leavic
        54
    leavic  
       2016-09-06 15:37:40 +08:00
    好酷啊
    aksoft
        55
    aksoft  
       2016-09-06 16:21:26 +08:00
    star
    sylnsfar
        56
    sylnsfar  
    OP
       2016-09-06 17:14:49 +08:00
    @Ncer 问题解决了吗?

    @0x5010 你提交的 issue 我已经修复了。

    @leavic @aksoft thanks
    Pysensor
        57
    Pysensor  
       2016-09-07 06:28:44 +08:00
    这项目 6666 ,必须给个 star ,很好玩很有意思
    sylnsfar
        58
    sylnsfar  
    OP
       2016-09-07 23:11:06 +08:00
    @Pysensor 谢谢支持
    mingyun
        59
    mingyun  
       2016-09-07 23:11:19 +08:00
    @sylnsfar 用的 python3 ,搞定了, star+1 ,感谢
    standalone
        60
    standalone  
       2016-09-28 22:04:39 +08:00
    @sylnsfar 请问能加入对中文字符的支持吗,今天偶然看到个 QR 码扫了一下出现中文,然后一路搜到 github 发现不能用中文好伤心...
    sylnsfar
        61
    sylnsfar  
    OP
       2016-09-29 13:22:43 +08:00   ❤️ 1
    @standalone 对中文的支持是有计划添加的,但最近没时间。。。
    bill9109
        62
    bill9109  
       2016-10-09 10:33:45 +08:00
    @sylnsfar 左侧和上方那两条定位图形是否可以去除?似乎不会影响识别
    sylnsfar
        63
    sylnsfar  
    OP
       2016-10-10 13:04:11 +08:00
    @bill9109 确实可以,不过这其实是我特地保留的...下次更新可能会可选去除
    jewey
        64
    jewey  
       2016-11-10 11:59:08 +08:00
    在 GitHub 看到这个,简直太酷了,非常感谢作者的分享,没学过 python ,昨天专门找了 python 的教程看,倒腾了一整天,发现要生成名片二维码的话,传入的名片的字符串会报错,注释掉 run 方法中字符串的判断就可以生成名片二维码了,应该是判断换行的字符的问题。
    好像也没支持生成有颜色的二维码,小修改了一下 draw_qrcode 方法实现了如下(第一次写 python ,不知道这样写对不对,不过生成的二维码是改了颜色的):
    #修改图片颜色
    pic = pic.convert("RGBA")
    datas = pic.getdata()
    newData = []
    for item in datas:
    if item[0] == 0 and item[1] == 0 and item[2] == 0:
    newData.append((0,0,255))#传入要修改的颜色
    else:
    newData.append(item)
    pic.putdata(newData)
    #修改图片颜色结束

    对了,还有一个就是不支持中文,我尝试修改了好久,修改完生成的二维码竟然识别不了,搞了大半天~~期待作者大神添加对中文的支持~~~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5362 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 03:51 · PVG 11:51 · LAX 19:51 · JFK 22:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.