程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

Python实战:使用Python生成二维码

发布于2019-11-24 19:41     阅读(1616)     评论(0)     点赞(30)     收藏(0)


前言

现如今,生活中使用到二维码的场景可以说随处可见。特别是手机支付中,通过手机扫描二维码跳转到支付页面,这种场景相信大家不会陌生。

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

那么让我们来扒一扒如何使用 Python 生成二维码图片。

一、简单生成二维码

  1. 安装qrcode库
pip install qrcode 
  • 1

因为国内网速的原因,有时下载会超时,建议使用国内的pip源

pip install qrcode -i https://pypi.douban.com/simple
  • 1

qrcode 依赖 Image 这个包,所以也要安装一个这个包,一样网速慢,建议使用国内的pip源

pip install Image -i https://pypi.douban.com/simple
  • 1
  1. 生成一个简单的二维码

安装完毕后,咱们生成个简单的二维码试试。(我用的博客主页地址偷偷生成了一个二维码[狗头][狗头])

data = "https://blog.csdn.net/m1090760001"
img = qrcode.make(data)
img.show()
img.save("qr_code.png")
  • 1
  • 2
  • 3
  • 4

运行一下试试效果
在这里插入图片描述

  1. 生成二维码的一般步骤:
  • 创建QRCode对象
  • add_data()添加数据
  • make_image()创建二维码(返回im类型的图片对象)
  • 自动打开图片,im.show()

上面案例中,我们只使用了img = qrcode.make(data)就实现了一个二维码的生成,原因是qrcode提供简单调用接口。其实你查看源码就可以看到:

def make(data=None, **kwargs):
    qr = QRCode(**kwargs)
    qr.add_data(data)
    return qr.make_image()
  • 1
  • 2
  • 3
  • 4

二、自定义二维码

如果想生成一个比较复杂的二维码,就要知道怎么去设置相关的属性。

  1. 基本的参数:
  • version: 一个整数,范围为1到40,表示二维码的大小(最小值是1,是个12×12的矩阵),如果想让程序自动生成,将值设置为 None 并使用 fit=True 参数即可。(默认情况是程序自动生成)
  • error_correction: 二维码的纠错范围,可以选择4个常量:
属性 描述
ERROR_CORRECT_L 7%以下的错误会被纠正
ERROR_CORRECT_M 15%以下的错误会被纠正(默认)
ERROR_CORRECT_Q 25 %以下的错误会被纠正
ERROR_CORRECT_H 30%以下的错误会被纠正
  • boxsize: 每个点(方块)中的像素个数
  • border: 二维码距图像外围边框距离,默认为4,而且相关规定最小为4
  1. 设置填充格的颜色,设置二维码背景色
# 设置红色的填充格,背景色为白色的二维码
img = qr.make_image(fill_color="red", back_color="white")
  • 1
  • 2

在这里插入图片描述
3. 在二维码中加一张图片
可以利用PIL库中image模块的paste函数

# img为二维码图片对象,path标识要添加的图片对象,where表示图片位置
img.paste(path,where,mask=None)
  • 1
  • 2

其中,img为image对象;path为所添加图片;where为tuple,如:(x,y),表示图片所在二维码的横纵坐标。
实现比较复杂,请查看实战部分源码,谢谢!

三、实战

# -*- coding: utf-8 -*-
# 生成二维码
import qrcode
from PIL import Image


# 生成二维码
def mark_qrcode(data):
    img = qrcode.make(data)
    img.show()
    img.save("qr_code.png")


def mark_my_qrcode(data):
    qr = qrcode.QRCode(
        version=4,
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        border=4,
    )
    qr.add_data(data)
    qr.make(fit=True)
    # 设置红色白底的二维码
    img = qr.make_image(fill_color="red", back_color="white")
    img_w, img_h = img.size
    # 获取logo
    icon = Image.open("m1090760001.jpg")
    icon_w, icon_h = icon.size

    # 设置图片最大尺寸6:1
    factor = 6
    size_w = int(img_w / factor)
    size_h = int(img_h / factor)
    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)
    # 获取中心的坐标
    c_w = int((img_w - icon_w) / 2)
    c_h = int((img_h - icon_h) / 2)
    img.paste(icon, (c_w, c_h), mask=None)
    img.show()


if __name__ == "__main__":
    data = "https://blog.csdn.net/m1090760001"
    # mark_qrcode()
    mark_my_qrcode(data)
  • 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
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

生成图片的实际效果如下(读者在运行上面代码是请先准备一张图片,不然会报错):
在这里插入图片描述



所属网站分类: 技术文章 > 博客

作者:343ueru

链接:https://www.pythonheidong.com/blog/article/163425/7295d76d62f4e2048f51/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

30 0
收藏该文
已收藏

评论内容:(最多支持255个字符)