• python代码实现生成二维码


    二维码结构:

    在这里插入图片描述

    从图中我们可以看出二维码结构整体划分为功能图形和编码区两大部分,功能图形又细分为:空白区、位置探测图形、位置探测图形分隔符、定位图形、校正图形,而编码区细分为:格式信息、版本信息、数据和纠错码字,来简单了解一下每一部分的功能:

    空白区:留白,不需要做任何处理

    位置探测图形:协助扫描软件定位二维码

    位置探测图形分隔符:区分功能图形和编码区

    定位图形:指示标识密度和确定坐标系

    校正图形:校正图形的数量和位置

    格式信息:存放格式化数据的信息

    版本信息:二维码的规格,二维码符号共有 40 种规格的矩阵
    数据和纠错码字:实际保存的二维码信息和纠错码字(用于修正二维码损坏带来的错误)

    安装需要的库:
    二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,而生成一个二维码也非常简单,在Python中我们可以通过qrcode库或者myqr库生成二维码,而生成一个二维码我们只需要2行代码,我们先安装qrcode库和myqr库,我这里是在虚拟环境里面直接安装:

    pip install qrcode

    pip install myqr

    在这里插入图片描述

    我这个是已经安装好了的

    生成一个二维码比较简单,下面我们就介绍几种不一样的方法来生成二维码吧~

    第一种:通过输入文字

    import qrcode,datetime
    
    text = input('输入文字:')
    img =qrcode.make(text)
    # 定义图片名称以时间命名
    nd = datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')
    #保存图片至本地目录,可以设定路径
    img.save(u'E:/'+ nd +'.png')
    #展示图片
    # img.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    第二种:输入网站地址

    如果能在二维码中添加个性化头像则更有趣。qrcode也支持该功能。

    首先我们使用QRCode类,它提供了更多控制选项。

    其中version的范围[1,40],控制生成二维码的大小;box_size表示二维码中每个表格有多少像素;border控制边框厚度等。

    import qrcode
    
    qr = qrcode.QRCode(
    
    	version=2,
    
    	error_correction=qrcode.constants.ERROR_CORRECT_L,
    
    	box_size=10,
    
    	border=1
    	)#设置二维码的大小
    
    qr.add_data("xxxxxxx")  #这里是填网站
    
    qr.make(fit=True)
    
    img = qr.make_image()
    
    img.save("二维码.png")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    记得修改其中的网站地址

    第三种: 直接在cmd里面用

    1、cmd里面彩色图片:myqr -p 图片本地地址 网址 -c
    2、cmd里面动态图片:myqr 网址 -c -p 图片本地地址

    在这里插入图片描述
    像这样子就搞好啦~

    第四种: 添加动态图片在中间

    ##可以自带logo!!!!不过只能放网址地址
    
    from PIL import Image
    import qrcode
    
    qr = qrcode.QRCode(version=5,error_correction=qrcode.constants.ERROR_CORRECT_H,box_size=8,border=4)
    qr.add_data("XXXXXXXX")   #这里是填网站
    qr.make(fit=True)
    
    
    img = qr.make_image()
    img = img.convert("RGBA")
    
    #logo="D:/favicon.jpg"
    icon = Image.open("123.gif")
    
    img_w,img_h = img.size
    factor = 4
    size_w = int(img_w / factor)
    size_h = int(img_h / factor)
    
    icon_w,icon_h = icon.size
    if icon_w >size_w:
        icon_w = size_w
    if icon_h > size_h:
        icon_h = size_h
    icon = icon.resize((icon_w,icon_h),Image.ANTIALIAS)
    
    w = int((img_w - icon_w)/2)
    h = int((img_h - icon_h)/2)
    icon = icon.convert("RGBA")
    img.paste(icon,(w,h),icon)
    #img.show()
    img.save('123.gif')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    记得修改其中的网站地址

    第五种: 改变二维码颜色(花里胡哨)

    import qrcode
    # 实例化二维码生成类
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )
    # 设置二维码数据
    data = "xxxxxxx"  #这里填你想要的网站
    qr.add_data(data=data)
    
    # 启用二维码颜色设置
    qr.make(fit=True)
    img = qr.make_image(fill_color="green", back_color="white")
    
    # 显示二维码
    img.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    fill_color后面接你想要的颜色

    第六种: 直接调背景图片

    from MyQR import myqr
    import os
    
    i,j,k=myqr.run(
        words="XXXXXXXXX",       #二维码文本内容
        # version=1,          #容错率
        # level='H',          #纠错,L,M,Q,H
        picture="5.jpg",       #背景图片
        colorized=True,        #图片对比度
        # contrast=1.0,           #图片亮度
        save_name="55.jpg"      #图片名字
        # save_dir=os.getcwd()    #保存路径
    )
    print(i,j,k)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    可以随便调二维码文本内容

    总结:

    
    from myqr import myqr
    
    #myqr也可以用来生成二维码,但是它和qrcode相比最大的特点就是它可以嵌入图片当背景。
    
     '''
    # 主要用到以下几个参数
    # words:文本,可以是一个链接,或者你想说的话(不支持中文,很不友好)
    # picture:你用到的图片,作为背景,不然只是一个光秃秃的二维码
    # colorsize:true,表示生成彩图
    # save_name:表示生成的二维码的名字
    '''
    
    myqr.run(words="XXXXXXXXXX",
         picture="xxx.jpg",
         colorized=true,
         save_name="xxxx.png")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    import qrcode
     
    """
    # 主要用到以下几个参数
    version: 二维码的格子大小,可以是1到40。值越大,格子越大,一般不超过10,选择3比较合适
    error_correction: 二维码错误容许率,默认为qrcode.constants.error_correct_m,容许小于 15% 的错误率
             此外还有qrcode.constants.error_correct_l: 容许小于 7% 的错误率
             qrcode.constants.ror_correct_h: 容许小于 30% 的错误率
    box_size: 二维码每个小格子包含的像素数量
    border: 二维码到图片边框的小格子数,默认值为 4        
    """
    qr = qrcode.qrcode() # 事实上里面的参数我们可以都不指定,默认会选择一个比较合适的参数
     
    # 调用add_data,指定url。
    qr.add_data("xxxxxxxxx")
    # 生成二维码图像,颜色为蓝色,背景色为粉色
    img = qr.make_image(fill_color='blue', back_color='pink')
    # 显示图像,这个会打开一个临时文件
    img.show()
    # 此外,我们还可以保存到硬盘上
    img.save("1.jpg")
     
    # 事实上,这个img实际上是通过pil模块得到的,可以理解为里面image对象
    # 如果你熟悉pil模块的话,那么你应该知道可以将里面image对象保存成图片对应的字节流
    from io import bytesio
    buf = bytesio()
    img.save(buf) # 将字节保存到buf里面
    with open("2.jpg", "wb") as f:
      f.write(buf.getvalue()) # 和直接保存为1.jpg是一样的
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    MyQR 和qrcode库是实现python生成二维码基本的两个库,python中虽然有各种第三方库提供极大的方便,但要想将第三方库提供的能力完全使用出来,需要我们去了解它们提供的api并实践。

    小编这里只是简单的使用qrcode和MyQR 生成二维码的几种使用方法,更强大的功能还需要你们继续去探究探究

  • 相关阅读:
    npx 有什么作用跟意义?为什么要有 npx?什么场景使用?
    nacos配置管理
    不安装运行时运行 .NET 程序 - NativeAOT
    每日一题:【LeetCode】1710. 卡车上的最大单元数
    【Python实战】年底找工作,年后不用愁,多个工作岗位随你挑哦~(灵魂发问找工作难嘛?)
    SqueezeNet 一维,二维网络复现 pytorch 小白易懂版
    MySQL查询性能优化七种武器之链路追踪
    NNDL 实验六 卷积神经网络(2)LeNet & ResNet
    独立IP和共享IP的区别以及各自的优势有哪些
    问题:anaconda的bin和envs目录莫名奇妙消失!
  • 原文地址:https://blog.csdn.net/zouxun660/article/details/126589689