python生成条形码和二维码

Barcode库/Qrcode库/MyQR库/Zxing库的简单介绍

0.本章内容

0.1.条形码的使用

  • 1.1.条形码介绍

  • 1.2.Barcode库的简单介绍

  • 1.3.Barcode库常用方法及参数介绍

  • 1.4.用python简单实现条形码生成

  • 0.2.二维码的使用

  • 2.1.二维码介绍

  • 2.2.Qrcode库的简单介绍

  • 2.3.使用qrcode库实现普通二维码

  • 2.4.Qrcode库的高级用法

  • 2.5.MyQR库的简单介绍

  • 2.6.使用MyQR库实现生成带图片的二维码

  • 0.3.解析二维码

  • 3.1.Zxing库的简单介绍

  • 3.2.使用zxing库解析二维码的内容

  • 0.4.导言:

  • 本章所生成的条形码和二维码图片均在images文件夹中

  • 1.条形码的使用

    1.1.条形码介绍

    条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息,因而在商品流通、图书管理、邮政管理银行系统等许多领域都得到广泛的应用 。

    条形码分为4个部分,从左到右分别为:

    1-3位:共3位,例如693,是中国的国家代码之一。(690–695都是中国的代码,由国际上分配)

    4-8位:共5位,例如69838,代表着生产厂商代码,由厂商申请,国家分配

    9-12位:共4位,例如0001,代表着厂内商品代码,由厂商自行确定

    第13位:共1位,例如3,是校验码,依据一定的算法,由前面12位数字计算而得到。

    1.2.Barcode库的简单介绍

  • barcode是一个用于生成条形码的库,默认生成格式为SVG的图片

  • 第三方库下载: 

  • pip install python-barcode

  • 1.3.Barcode库常用方法及参数介绍

  • 查看python-barcode支持的条形码格式:

  • barcode.PROVIDED_BARCODES

  • 简单创建条形码 barcode.get

  • barcode.get(name,code,writer_mode,set_style,bottom_text)
    参数解释:
    name:条形码格式;-->必选参数
    ode:条形码内容;--->必选参数
    [ImageWriter或SVGWriter:要使用的写入程序;默认是SVGWriter
    set_style:(字典)生成条形码图片的设置样式; 默认是default_writer_options这个变量
    bottom_text:条形码底部显示的文本]
  • 创建条形码对象 EAN():

  • EAN():
    参数write 为 NONE,保存图像文件格式则是 svg,
    参数为ImageWrite()则默认图片格式是 PNG,需要改成JPEG等,则需要在options={“format”: “JPEG”},进行设置
  • 保存条形码图片 .save()

  • save函数有两个参数:save(filename,options=None)
    filename参数为保存文件名,不需要加扩展名,将根据设置自动添加扩展名,由函数返回文件全名。当前面构造函数使用默认writer时,保存为SVG文件,扩展名为.svg。
    options参数默认值为None,此时使用默认参数。如果需要修改设置,使用字典传入参数,例如:save("d:\\barcode",{'text': 'ABCD','format':'JPEG'})。可用参数如下:
        'module_width':默认值0.2,每个条码宽度(?),单位为毫米
        'module_height':默认值15.0,条码高度,单位为毫米
        'quiet_zone':默认值6.5,两端空白宽度,单位为毫米
        'font_size':默认值10,文本字体大小,单位为磅
        'text_distance':默认值5.0,文本和条码之间的距离,单位为毫米
        'background':默认值'white',背景色
        'foreground':默认值'black',前景色
        'text':默认值'',显示文本,默认显示编码,也可以自行设定
        'write_text':默认值True,是否显示文本,如果为True自动生成text的值,如果为False则不生成(如果此时手工设置了text的值,仍然会显示文本)。
        'center_text':默认值True,是否居中显示文本
        'format':默认值'PNG',保存文件格式,默认为PNG,也可以设为JPEG、BMP等,只在使用ImageWriter时有效。
        'dpi':默认值300,图片分辨率,,只在使用ImageWriter时有效。

    1.4.用python简单实现条形码生成

    导包:

    import barcode

    创建条形码格式对象

    # 创建条形码格式对象,参数为支持的格式
    EAN = barcode.get_barcode_class('code39')

    定义条形码内容

    # 条形码内容
    message = "693202111523382"

    默认格式是SVG,所以为了使生成的条形码是图片,导包:ImageWriter

    from barcode.writer import ImageWriter

    创建条形码格式

    # 创建条形码对象
    ean = EAN(message,writer=ImageWriter())

    保存条形码图片

    # 保存条形码图片,并且返回路径
    fullname = ean.save("code39")
    print(f"条形码路径:{fullname}")

    1.4.1.条形码生成的代码总结:

    import barcode
    from barcode.writer import ImageWriter
    
    # print(f"python-barcode支持的条形码格式:\n{barcode.PROVIDED_BARCODES}") #查看 python-barcode 支持的条形码格式
    
    # 更多了解:https://pypi.org/project/python-barcode/0.8.1/
    
    # 创建条形码格式对象,参数为支持的格式
    EAN = barcode.get_barcode_class('code39')
    
    # 条形码内容
    """
    自定义条形码内容:
    693:中国的国家代码之一
    2021.11.5 写代码的时间
    23:38:写代码的时间
    2:由前面12位数字依据一定的算法计算得到 6+9+3-2-0-2-1-1-1-5-2+3+3-8
    """
    message = "693202111523382"
    
    # 创建条形码对象
    ean = EAN(message,writer=ImageWriter())
    
    # 保存条形码图片,并且返回路径
    fullname = ean.save("images/条形码")
    print("条形码生成成功")
    print(f"条形码路径:{fullname}")

    2.二维码的使用

    2.1.二维码介绍

    二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。

    二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。

    2016年8月3日,支付清算协会向支付机构下发《条码支付业务规范》(征求意见稿),意见稿中明确指出支付机构开展条码业务需要遵循的安全标准。这是央行在2014年叫停二维码支付以后首次官方承认二维码支付地位。

    2.2.Qrcode库的简单介绍

    qrcode库是用于生成二维码图像的库,该库的下载链接:qrcode · PyPIGitHub – lincolnloop/python-qrcode: Python QR Code image generator

    使用该库时,需要安装image库,而image库依赖于django、olefile、pillow库。

    使用pip安装的命令如下:

    pip install qrcode
    pip install  image
    

    2.3.使用qrcode库实现普通二维码

    导包

    import qrcode

    设置二维码内容

    data = "Ordinary QR code generated successfully"  #二维码跳转链接或内容 不过好像中文不行

    生成二维码

    image = qrcode.make(data=data)

    显示二维码

    image.show()

    保存二维码

    image.save("images/普通二维码生成.jpg")

    2.3.1.生成普通二维码案例代码总结

    # qrcode 普通二维码生成
    import qrcode
    data = "Ordinary QR code generated successfully"  #二维码跳转链接或内容 不过好像中文不行
    # 生成二维码
    image = qrcode.make(data=data)
    # 显示二维码
    image.show()
    # 保存二维码
    image.save("images/普通二维码生成.jpg")
    print("普通二维码生成成功!!!")
    print("="*10)

    2.4.Qrcode库的高级用法

    .QRCode()方法的使用

    .QRCode()方法 参数:
    # version:二维码的格子矩阵大小,可以是1到40,1最小为21*21,40是177*177
    # error_correction:二维码错误容许率,默认 ERROR_CORRECT_M,容许小于 15% 的错误率
    # box_size:二维码每个小格子包含的像素数量
    # border:二维码到图片边框的小格子数,默认值为 4
    

    导包

    import qrcode

    创建QRCode对象

    qr = qrcode.QRCode(version=1,
                   error_correction=1,
                   box_size=10,
                   border=4
                   )

    设定二维码内容

    data = "QR code with color generated successfully"   #二维码跳转链接或内容 不过好像中文不行

    使用add_data()方法将附加数据到当前QR对象

    qr.add_data(data=data)

    启用二维码颜色设置

    qr.make(fit=True)

    设置QR 的背景和绘画颜色

    # fill_color`和`back_color`可以更改 QR 的背景和绘画颜色
    img = qr.make_image(fill_color="blue",back_color="white")

    二维码显示

    img.show()

    二维码保存

    img.save("images/带颜色的二维码.jpg")

    2.4.1.生成带颜色的二维码案例代码总结

    # qrcode 带颜色的二维码生成
    import qrcode
    """
    .QRCode()方法 参数:
    version:二维码的格子矩阵大小,可以是1到40,1最小为21*21,40是177*177
    error_correction:二维码错误容许率,默认 ERROR_CORRECT_M,容许小于 15% 的错误率
    box_size:二维码每个小格子包含的像素数量
    border:二维码到图片边框的小格子数,默认值为 4
    """
    qr = qrcode.QRCode(version=1,
                  error_correction=1,
                  box_size=10,
                  border=4
                  )
    
    data = "QR code with color generated successfully"  #二维码跳转连接或内容 不过好像中文不行
    qr.add_data(data=data)
    
    # 启用二维码颜色设置
    qr.make(fit=True)
    img = qr.make_image(fill_color="blue",back_color="white")
    
    # 二维码显示
    # img.show()
    
    # 二维码图片保存
    img.save("images/带颜色的二维码.jpg")
    print("带颜色的二维码生成成功!!")

    2.5.MyQR库的简单介绍

    MyQR 库非常强大,可以生成各种各样的二维码。可以生成 正常的二维码、黑白图片二维码、彩色图片二维码、动态二维码

    MyQR 的 Github 地址如下

    https://github.com/sylnsfar/qrcode
    

    可以通过命令行安装 MyQR 库,也可以在PyCharm中之间安装 MyQR 库

    pip install myqr
    

    2.6.使用MyQR库实现生成带图片的二维码

    2.6.1.生成普通带图片的二维码

    我们只需要调用 myqr.run() 方法,传递给定的参数就能生成指定的二维码。

    run()方法参数:

    run(words, version=1, level='H', picture=None, colorized=False, contrast=1.0, brightness=1.0, save_name=None, save_dir=os.getcwd())
    

    run()方法参数介绍

     

    导包:

    from MyQR import myqr

    设置二维码内容 可以是字符或者链接,不过好像中文不好使

    words = "QR code with graph generated successfully"

    调用 myqr.run() 方法,传递给定的参数就能生成指定的二维码

    myqr.run(
        words=words,
        version=1,
        picture='images/A1.png',
        colorized=True,
        save_name="images/带图片的二维码.png"
    )

    2.6.1.1.生成带图二维码案例代码总结

    # 带图的二维码
    from MyQR import myqr
    """
    words:二维码内容,链接或者句子
    version:二维码大小,范围为[1,40]
    level:二维码纠错级别,范围为{L,M,Q,H},H为最高级,默认。
    picture:自定义二维码背景图,支持格式为 .jpg,.png,.bmp,.gif,默认为黑白色
    colorized:二维码背景颜色,默认为 False,即黑白色
    contrast:对比度,值越高对比度越高,默认为 1.0
    brightness:亮度,值越高亮度越高,默认为 1.0,值常和对比度相同
    save_name:二维码名称,默认为 qrcode.png
    save_dir:二维码路径,默认为程序工作路径
    """
    # 二维码内容
    words = "QR code with graph generated successfully"
    myqr.run(
        words=words,
        version=1,
        picture='images/A1.png',
        colorized=True,
        save_name="images/带图片的二维码.png"
    )
    print("带图的二维码生成成功!!!")
    print("="*10)

    2.6.2.生成带动图的二维码

    只需要将run()函数中的picture参数改用GIF动图即可

    导包

    from MyQR import myqr

    设置二维码内容 可以是字符或者链接,不过好像中文不好使

    words = "The QR code. GIF of the drawing was saved successfully"

    使用run()函数生成二维码

    myqr.run(
        words=words,
        version=1,
        picture="images/企鹅.gif",
        colorized=True,
        save_name="images/带动图的二维码.gif"
    
    )

    2.6.2.1.生成带动图的二维码案例代码总结

    # 带动图的二维码
    
    from MyQR import myqr
    # 更多:https://pypi.org/project/MyQR/         https://github.com/sylnsfar/qrcode
    words = "The QR code. GIF of the drawing was saved successfully"
    myqr.run(
        words=words,
        version=1,
        picture="images/企鹅.gif",
        colorized=True,
        save_name="images/带动图的二维码.gif"
    
    )
    print("带动图的二维码.gif保存成功!!")
    print("="*10)

    3.解析二维码

    3.1.zxing库的简单介绍

    zxing库是一个开源的、多格式的1D/2D条形码图像处理库,用Java实现,具有其他语言的端口,但出现意外的EOF。我们的重点是使用手机上的内置摄像头扫描和解码设备上的条形码,而无需与服务器通信。然而,该项目也可用于在台式机和服务器上对条形码进行编码和解码。

    目前支持格式:

    UPC-A and UPC-EEAN-8 and EAN-13Code 39 Code 93Code 128ITF CodabarRSS-14 (all variants)RSS Expanded (most variants)QR Code Data MatrixAztec ('beta' quality)PDF 417 ('alpha' quality)

    第三方包下载:

    pip install zxing
    

    了解更多:Python zxing包_程序模块 – PyPI – Python中文网

    3.2.使用zxing库解析二维码的内容

    导包:

    import zxing

    实例化BarCodeReader

    reader = zxing.BarCodeReader()

    调用decode()函数,decode(要解析的条形码或者二维码)

    在decode函数中,用subprocess包中的Popen实现了调用jar包的操作,类似于VB,VC中的管道通讯。

    barcode = reader.decode("images/带动图的二维码.gif")

    获取解析后的内容

    result = barcode.parsed
    print(f"解析二维码内容:{result}")

    3.2.1.解析二维码 案例代码总结

    import zxing
    
    reader = zxing.BarCodeReader()
    # 在decode函数中,用subprocess包中的Popen实现了调用jar包的操作,类似于VB,VC中的管道通讯。
    barcode = reader.decode("images/带动图的二维码.gif")
    result = barcode.parsed
    print(f"解析二维码内容:{result}")

    3.3.使用zxing库解析条形码的内容

    导包:

    import zxing

    实例化BarCodeReader

    reader = zxing.BarCodeReader()

    调用decode()函数,decode(要解析的条形码或者二维码)

    在decode函数中,用subprocess包中的Popen实现了调用jar包的操作,类似于VB,VC中的管道通讯。

    barcode = reader.decode("images/条形码.png")

    获取解析后的内容

    result = barcode.parsed
    print(f"解析条形码的内容:{result}")

    3.3.1.解析条形码 案例代码总结

    # 解析条形码
    import zxing
    reader = zxing.BarCodeReader()
    # 在decode函数中,用subprocess包中的Popen实现了调用jar包的操作,类似于VB,VC中的管道通讯。
    barcode = reader.decode("images/条形码.png")
    result = barcode.parsed
    print(f"解析条形码的内容:{result}")

     需要源代码请访问:二维码和条形码: 用python简单实现二维码和条形码

    来源:苏九黎

    物联沃分享整理
    物联沃-IOTWORD物联网 » python生成条形码和二维码

    发表评论