Python qr code:可生成图片二维码、动态图二维码 - V2EX
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 20071 次点击
    这是一个创建于 3323 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 兼容吧
    yemoluo
        9
    yemoluo  
       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

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

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

    具体参见这一楼,虽然不知道我分析的对不对: 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     Solana     2205 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 16:07 PVG 00:07 LAX 09:07 JFK 12:07
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86