推荐学习书目
› 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
0xhw
V2EX  ›  Python

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

  •  7
     
  •   0xhw ·
    x-hw · Sep 5, 2016 · 21574 views
    This topic created in 3715 days ago, the information mentioned may be changed or developed.

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

    ***介绍***

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

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

    ***五种示例***

    一 普通二维码


    二 黑白静态二维码


    三 彩色静态二维码



    四 黑白动态二维码


    五 彩色动态二维码



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


    new:
    Supplement 2  ·  Sep 6, 2016
    *更新:新增 exe 文件

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

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

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

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

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

    我的算法来源是这个: http://research.swtch.com/qart
    7sDream
    7sDream
    Sep 5, 2016
    19
    @sylnsfar

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

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

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


    求解。试了换图片也不行
    0x5010
    0x5010
    Sep 6, 2016
    53
    @0x5010 是在使用微信链接的时候出错的 试了其他 url 可以
    leavic
    leavic
    Sep 6, 2016
    54
    好酷啊
    aksoft
    aksoft
    Sep 6, 2016
    55
    star
    0xhw
    0xhw
    OP
    Sep 6, 2016
    56
    @Ncer 问题解决了吗?

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

    @leavic @aksoft thanks
    Pysensor
    Pysensor
    Sep 7, 2016
    57
    这项目 6666 ,必须给个 star ,很好玩很有意思
    0xhw
    0xhw
    OP
    Sep 7, 2016
    58
    @Pysensor 谢谢支持
    mingyun
    mingyun
    Sep 7, 2016
    59
    @sylnsfar 用的 python3 ,搞定了, star+1 ,感谢
    standalone
    standalone
    Sep 28, 2016
    60
    @sylnsfar 请问能加入对中文字符的支持吗,今天偶然看到个 QR 码扫了一下出现中文,然后一路搜到 github 发现不能用中文好伤心...
    0xhw
    0xhw
    OP
    Sep 29, 2016❤️1
    61
    @standalone 对中文的支持是有计划添加的,但最近没时间。。。
    bill9109
    bill9109
    Oct 9, 2016
    62
    @sylnsfar 左侧和上方那两条定位图形是否可以去除?似乎不会影响识别
    0xhw
    0xhw
    OP
    Oct 10, 2016
    63
    @bill9109 确实可以,不过这其实是我特地保留的...下次更新可能会可选去除
    jewey
    jewey
    Nov 10, 2016
    64
    在 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)
    #修改图片颜色结束

    对了,还有一个就是不支持中文,我尝试修改了好久,修改完生成的二维码竟然识别不了,搞了大半天~~期待作者大神添加对中文的支持~~~
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1750 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 93ms · UTC 03:41 · PVG 11:41 · LAX 19:41 · JFK 22:41
    ♥ Do have faith in what you're doing.