欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python 使用MyQR和qrcode来制作二维码

程序员文章站 2022-03-20 17:47:50
前言  今天下午无聊,突发奇想想玩玩二维码,于是就结合着上学期学的标识技术,用python制作了一下二维码。一、二维码  二维码( 2 −...

前言

  今天下午无聊,突发奇想想玩玩二维码,于是就结合着上学期学的标识技术,用python制作了一下二维码。

一、二维码

  二维码( 2 − d i m e n s i o n a l (2-dimensional(2−dimensional b a r c o d e ) barcode)barcode),又称二维条形码。它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形来记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。

  一维条形码,就是我们日常所说的条形码( b a r c o d ) (barcod)(barcod),常见于食品包装上。它是将宽度不等的多个黑条和空白,按一定的编码规则排列,用以表达一组信息的图形标识符。常见的一维条形码是由黑条(简称条)和白条(简称空)排成平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期以及图书分类号、邮件起止地点、类别、日期等信息。
  通常一维条形码所能表示的字符集不过10个数字、26个英文字母及一些特殊字符,条码字符集最大所能表示的字符个数为128个ascii字符,信息量非常有限。

  二维码有其特定的字符集,每个字符占有一定的宽度,每种码具有一定的校验功能,同时还具有对不同行的信息自动识别功能、及处理图形旋转变化等特点。
  二维条形码是在二维空间水平和竖直方向存储信息的条形码。它的优点是信息容量大,译码可靠性高,纠错能力强,制作成本低,保密与防伪性能好。

目前,世界上应用最多的二维条码符号有aztec code、pdf147、qr code等。

python 使用MyQR和qrcode来制作二维码

常见的二维码为qr codecode,qr全称是quick response,是一个近几年来移动设备上超流行的一种编码方式。它的结构如下:

python 使用MyQR和qrcode来制作二维码

qr code属于矩阵式二维条码,又称棋盘式二维条码。它是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”,点的排列组合确定了矩阵式二维条码所代表的意义。
主要有以下特点:

  • 符号规格从版本1(21×21)到版本40(177×177),每提高一个版本,每边增加 4 个码元(即指构成 qr 码的方形黑白点);
  • 信息容量大:能存储 7089 个数字字符或 4296 个字母字符或 2953 个 8 位字节字符或 1817 汉字字符;
  • 纠错能力强:即使部分编码变脏或破损,也可以恢复数据。l级约可纠错 7% 的数据码字,m级约可纠错 15% 的数据码字,q级约可纠错25%的数据码字,h级约可纠错 30% 的数据码字;
  • 可以从任意方向读取:qr码可以从 360° 任一方向均可快速读取。通过 qr 码中的三处定位图案,可以帮助 qr 码不受背景样式的影响,实现快速稳定的读取。

二、myqr

myqr可以生成常见的二维码、艺术二维码(黑白或彩色),动态二维码(黑白或彩色),安装命令如下:

pip install myqr -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

python 使用MyQR和qrcode来制作二维码

更多详细内容可以参考官方文档:

代码如下

if __name__ == '__main__':
    version, level, qr_name = myqr.run(
        words='https://blog.csdn.net/qq_42730750',
        version=1,
        level='h',
        picture='./xkd.gif',
        colorized=true,
        contrast=1.0,
        brightness=1.0,
        save_name='test4.gif',
        save_dir=os.getcwd()
    )
    print(version)
    print(level)
    print(qr_name)

  这是我生成的几个二维码:

python 使用MyQR和qrcode来制作二维码

python 使用MyQR和qrcode来制作二维码

myqr确实是挺好用的,唯一的缺点就是,不支持中文!!!没错,是不是有点遗憾,它只支持以下字符:

  • 数字 0 到 9
  • 大小写的英文字母
  • 常用英文标点符号和空格

三、qrcode

qrcode的功能虽稍逊于myqr,但是它支持中文字符,且能生成矢量图,安装命令如下:

pip install qrcode -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

python 使用MyQR和qrcode来制作二维码

官方文档 github 网址:

生成二维码代码如下:

def mergeimg(img1, img2, flag=true):
    """
    合并图像
    :param img1:
    :param img2:
    :param flag: true 表示将logo居中, false 表示将logo作为背景图
    :return:
    """
    img1_w, img1_h = img1.size
    if flag:
        img2_w = int(img2.size[0] / 3)
        img2_h = int(img2.size[1] / 3)
        # 缩放logo
        img2 = img2.resize(size=(img2_w, img2_h), resample=image.antialias)
        # 将logo居中显示
        img1.paste(im=img2, box=(int((img1_w - img2_w) / 2), int((img1_h - img2_h) / 2)))
        img1.save('./test8.png')
    else:
        img2 = img2.resize(size=(img1_w, img1_h), resample=image.antialias)
        # 两张图片的size和mode要一致
        # 计算公式为out = image1 * (1.0 - alpha) + image2 * alpha
        # 这里的背景色就是一种干扰了, 如果将二维码的透明度设置过高会识别不出来
        out_img = image.blend(img1, img2, alpha=0.3)
        out_img.save('./test9.png')


if __name__ == '__main__':
    qr = qrcode.qrcode(
        version=1,
        error_correction=qrcode.constants.error_correct_h,
        box_size=10,
        border=4,
    )
    qr.add_data('这是我的博客地址: https://blog.csdn.net/qq_42730750')
    qr.make(fit=true)

    # black green purple orange pink white blue
    # make_image() 返回的是一个pilimage对象
    # 可以使用pillow对它进行图像处理相关的操作
    # img1 = qr.make_image(fill_color="#8a2be2", back_color="white")
    img1 = qr.make_image(fill_color="orange", back_color="white").convert('rgb')
    # img1.show()
    # img1.save('./test6.png')

    img2 = image.open('./cutcamera.png').convert('rgb')
    mergeimg(img1, img2, flag=true)

  这是我生成的几个二维码:

python 使用MyQR和qrcode来制作二维码

注:文中生成的二维码均绿色、健康,仅用作学习之用,可以放心扫。

以上就是python 使用myqr和qrcode来制作二维码的详细内容,更多关于python用myqr和qrcode来制作二维码的资料请关注其它相关文章!