开发者社区 > 博文 > 使用Python生成二维码
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

使用Python生成二维码

  • lt****
  • 2024-03-29
  • IP归属:北京
  • 100浏览

    1、背景

    上一次我们介绍了什么是二维码,读过这篇文章以后,相信大家对二维码已经有了一定的认识,那么有没有想过如何自己动手生成二维码呢?二维码在我们的生活与工作中,都能够做什么呢?今天我们来探讨一下用Python如何生成二维码。

    2、使用哪些库

    Python具有丰富的第三方库,能够生成二维码的就有qrcode库、segno库、pystrich库、myqr库。

    其中segno是一个纯python语言开发的二维码和微二维码生成器。常用的还有qrcode库,功能也很丰富。pystrich库作者好久都没有进行更新,不建议继续使用。myqr库可以生成基本二维码、彩色二维码和动态二维码。今天我们主要介绍segno,它支持python2.7和python3.5+,使用时请注意自己的python版本。其他模块感兴趣的小伙伴可以自行探索一下。

    3、如何安装

    安装时与其他python模块一样,使用pip命令安装即可

    # 安装segno库
    pip insyall segno
    
    # 指定版本安装
    pip insyall segno==0.3.2
    

    4、如何使用

    4.1、 segno常见使用方法

    方法参数说明
    make_qr内容生成二维码
    make_micro内容生成微二维码
    makemicro生成二维码,默认生成微二维码
    version指定二维码版本,默认为1
    error=‘级别’,boost_error=False指定二维码纠错级别(L、M、Q、H),默认为L级别
    mask指定数据掩码,默认为最佳掩码
    save文件名称与格式将二维码保存为指定格式的文件
    border指定二维码边框,为None时将使用默认值
    scale指定序列化缩放因子,默认为1
    dark=‘颜色’, light='颜色'指定暗模块和亮模块的颜色
    kind保存到流

    4.2、 使用示例

    4.2.1、 基本使用

    import segno
    
    # 因为segno不仅能够生成二维码,还能够生成微二维码,默认生成微二维码,micro为False将强制生成二维码
    qrcode = segno.make("Hello World!", micro=False)
    
    # 或使用函数:segno.make_qr()创建二维码
    qrcode = segno.make_qr("Hello World!")
    
    # 注意:因为汉字模式不在ISO/IEC 18004范围内,因此二维码阅读器并未广泛支持它,在使用时应谨慎。
    # 此外汉字模式不适用微二维码。
    qrcode = segno.make("你好!", micro=False, mode='hanzi')
    
    # 查看默认版本
    print(qrcode.version) # 1
    
    # 明确指定错误级别L,不允许自动提高错误级别
    qrcode = segno.make('Hello World!',
                        error='l', boost_error=False)
    print(qrcode.designator)  # 1-L
    
    # 指定掩码
    qrcode = segno.make("Hello World!", micro=False, mask=1)
    print(qrcode1.mask)  # 1
    
    # 保存二维码
    qrcode = segno.save("Hello World.png")  # 生成图片
    
    # 支持序列为其他格式保存
    qrcode.save('hello.svg')  # svg文件
    qrcode.save('hello.txt')  # text文件
    
    # 指定二维码边框
    qrcode.save('hello_default.png', border=None)  # 默认值
    qrcode.save('hello_none.png', border=0)  # 无边框
    qrcode.save('hello_big.png', border=5)  # 大边框
    
    # 指定缩放因子
    qrcode.save('hello.png', scale=10)  # 1模块大小 == 10 像素
    qrcode.save('hello.svg', scale=2.4)  # svg可以接受浮点值,png赋值浮点值时,将会归整为2
    

    正常二维码

    无边框

    大边框

    // svg格式
    <?xml version="1.0" encoding="utf-8"?>
    <svg xmlns="http://www.w3.org/2000/svg" width="29" height="29" class="segno"><path class="qrline" stroke="#000" d="M4 4.5h7m1 0h4m2 0h7m-21 1h1m5 0h1m1 0h1m2 0h1m2 0h1m5 0h1m-21 1h1m1 0h3m1 0h1m2 0h3m2 0h1m1 0h3m1 0h1m-21 1h1m1 0h3m1 0h1m1 0h1m1 0h3m1 0h1m1 0h3m1 0h1m-21 1h1m1 0h3m1 0h1m2 0h1m1 0h1m2 0h1m1 0h3m1 0h1m-21 1h1m5 0h1m2 0h4m1 0h1m5 0h1m-21 1h7m1 0h1m1 0h1m1 0h1m1 0h7m-13 1h5m-13 1h1m1 0h2m1 0h3m1 0h4m1 0h1m2 0h1m1 0h2m-20 1h1m1 0h1m1 0h1m1 0h4m1 0h7m1 0h1m-21 1h1m1 0h1m2 0h2m2 0h1m1 0h1m1 0h1m1 0h1m3 0h2m-20 1h2m4 0h2m1 0h1m4 0h1m1 0h1m1 0h1m-19 1h1m1 0h4m1 0h3m1 0h3m5 0h1m-13 1h1m1 0h2m2 0h2m2 0h1m-19 1h7m1 0h1m1 0h1m2 0h4m-17 1h1m5 0h1m1 0h1m2 0h3m1 0h1m1 0h2m-19 1h1m1 0h3m1 0h1m2 0h3m5 0h3m-20 1h1m1 0h3m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m2 0h3m-20 1h1m1 0h3m1 0h1m1 0h2m2 0h1m2 0h1m2 0h1m-19 1h1m5 0h1m2 0h3m1 0h4m3 0h1m-21 1h7m1 0h4m1 0h3m2 0h1"/></svg>
    

    4.2.2、 进阶使用

    指定暗模块颜色

    import segno
    
    qrcode = segno.make_qr("Hello World!")
    
    # 指定暗模块的颜色
    qrcode.save("hello_color.png", dark="#ccc")
    

                                                                       

                                                                           指定暗模块

    指定暗模块和亮模块的颜色

    import segno
    
    qrcode = segno.make_qr("Hello World!")
    
    # 指定暗模块和亮模块的颜色
    qrcode.save('hello_color.png', dark='darkred', light='lightblue')
    

                                                                       

                                                                       指定暗模块和亮模块

    添加logo

    import segno
    from PIL import Image # python画图的库
    # 安装:pip install pillow, m1使用:arch -x86_64 pip3 install Pillow 
    
    qrcode = segno.make_qr("Hello World!")
    
    # 保存到流
    buff = io.BytesIO()
    qrcode.save(buff, kind='png', dark='darkblue', light='#eee')
    buff.seek(0)
    img = Image.open(buff).convert('RGB')
    img_width, img_height = img.size
    logo_max_size = img_height // 3  # logo尺寸
    logo_img = Image.open('./13.png')  # logo照片
    # 调整logo大小
    logo_img.thumbnail((logo_max_size, logo_max_size), Image.Resampling.LANCZOS)
    # 计算二维码中心位置
    box = ((img_width - logo_img.size[0]) // 2, (img_height - logo_img.size[1]) // 2)
    # 组合图片
    img.paste(logo_img, box)
    # 保存
    img.save('qrcode_with_logo.png')
    

                                                                           

                                                                               添加logo

    4.3、 使用场景

    4.3.1、 快速连接WIFI

    from segno import helpers
    
    wifi_settings = {
        "ssid": '(wifi名称)',
        "password": '(wifi密码)',
        "security": 'WPA',
        "hidden": False. # 是否是隐藏wifi
    }
    
    wifi = helpers.make_wifi(wifi_settings)
    
    # 注意:微信扫描时只能读取信息,使用手机自带的二维码相机扫描,能够弹窗直接连接wifi。
    wifi.save("wifi.png", dark="yellow", light="#323524", scale=10)
    

                                                                       

                                                                               Wi-Fi信息

    4.3.2、 快速发送邮件

    from segno import helpers
    
    qrcode = helpers.make_email(
        to='email_address@jd.com',  # 收件人,字符串或者可迭代字符串
        cc='recipient_address@jd.com',  # 抄送人,字符串或者可迭代字符串
        subject='这是主题',
        body='这是邮件内容'
    )
    
    qrcode.save("email.png", scale=10)
    

                                                                           

                                                                                   快速发送邮件

    4.3.3、 快速添加联系人

    from segno import helpers
    
    vcard = helpers.make_vcard(
            name='姓名',  # 联系人姓名
            email=('邮箱地址'),  # 邮箱
            url=['www.jd.com'],  # 主页
            phone='400xxxxxxx'  # 电话号码
        )
    
    vcard.save('vcard.png', dark="#FF7D92", scale=10)
    

                                                                           

                                                                                   添加联系人

    4.4 其他场景

    • 物品属性标签
    • 店铺地址信息
    • 紧急联系人信息
    • 挪车二维码
    • 等等

    5、总结

    至此,如何使用python生成二维码,通过segno模块的介绍,我们可以快速的生成自己需要的二维码,生活和工作中,我们都能根据自己的需要,生成二维码,从而方便我们,使事情变得更加简单,还有另外几个二维码库没有介绍,感兴趣的小伙伴,可以自行学习一下。


    文章数
    2
    阅读量
    397