安装
pip3 install qrcode -i https://pypi.douban.com/simple
基础使用
import os
import qrcode
path = os.path.join(os.path.dirname(settings.BASE_DIR), 'scripts', 'a.jpg')
qrcode.make('https://blog.csdn.net/qq_52385631?spm=1010.2135.3001.5421').save(path)
其他案例
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.dev')
import qrcode
from django.conf import settings
path = os.path.join(os.path.dirname(settings.BASE_DIR), 'scripts', 'a.jpg')
qrcode.make('https://blog.csdn.net/qq_52385631?spm=1010.2135.3001.5421').save(path)
生成带有logo的
参数说明:
version:控制二维码的大小,取值范围从1到40。取最小值1时,二维码大小为21*21。取值为 None (默认)或者使用fit=true参数(默认)时,二维码会自动调整大小。
error_correction:控制二维码纠错级别。
ERROR_CORRECT_L:大约7%或者更少的错误会被更正。
ERROR_CORRECT_M:默认值,大约15%或者更少的错误会被更正。
ERROR_CORRECT_Q:大约25%或者更少的错误会被更正。
ERROR_CORRECT_H:大约30%或者更少的错误会被更正。
box_size:控制二维码中每个格子的像素数,默认为 10。
border:控制二维码四周留白包含的格子数,默认为4。
image_factory:选择生成图片的形式,默认为 PIL 图像。
mask_pattern:选择生成图片的的掩模。
add_data(str,optimize=20):添加要转换的文字到data参数;如果使用了optimize优化参数,数据将被拆分为多个块来进行优化,以找到一个长度至少为这个值的足够简洁的方式来生成二维码。设置为“0”以避免优化。
make(fit=True):当fit参数为真或者没有给出version参数时,将会调用best_fit方法来找到适合数据的最小尺寸。如果没有设置mask_pattern,将会调用best_mask_pattern方法来找到找到最有效的掩模图案。最后将这些数据传递给makeImpl方法来生成二维码。与qrcode本体的make方法不一样的是,这个方法没有任何返回值。
make_image(fill_color=None, back_color=None,image_factory=None):创建二维码的图像并返回,默认为 PIL 图像。如果要让二维码有颜色,可以在这里设置fill_color, back_color
# 带有logo图案的二维码
import os
from PIL import Image
import qrcode
def main(logo_path, save_path):
# QRCode()这里我们创建了一个对象:
qr = qrcode.QRCode(version=5, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=8, border=4)
# version:值为1~40的整数,控制二维码的大小(最小值是1,是个21×21的矩阵)
# error_correction:控制二维码的错误纠正功能。可取值下列4个常量:
'''
qrcode.constants.ERROR_CORRECT_X:
1. X=L时,大约7%或更少的错误能被纠正。
2. X=M(默认)时,大约15%或更少的错误能被纠正。
3. X=Q时,25%以下的错误会被纠正。
4. X=H时,大约30%或更少的错误能被纠正。
'''
# box_size:控制二维码中每个小格子包含的像素数。
# border:控制边框(二维码与图片边界的距离)包含的格子数(默认为4)
# 向二维码中添加信息
qr.add_data("https://blog.csdn.net/qq_52385631?spm=1010.2135.3001.5421")
qr.make(fit=True)
img = qr.make_image()
# 二维码设置为彩色
img = img.convert('RGBA')
# 打开logo图片
logo = Image.open(logo_path)
# 二维码尺寸
img_w, img_h = img.size
# 默认LOGO最大设为图片的1/4
factor = 4
# 最大logo尺寸
size_w = int(img_w / factor)
size_h = int(img_h / factor)
# logo的尺寸
logo_w, logo_h = logo.size
if logo_w > size_w or logo_h > size_h:
logo_w = size_w
logo_h = size_h
logo = logo.resize((logo_w, logo_h), Image.ANTIALIAS).convert('RGBA')
l_w = int((img_w - logo_w) / 2)
l_h = int((img_h - logo_h) / 2)
# 替换指定位置
img.paste(logo, (l_w, l_h), logo)
img.show()
img.save(save_path)
main(logo_path='', save_path='') # 调用main()函数
其他案例
# 带有logo图案的二维码
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.settings.dev')
from PIL import Image
import qrcode
from django.conf import settings
def main(logo_path, save_path):
# QRCode()这里我们创建了一个对象:
qr = qrcode.QRCode(version=5, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=8, border=4)
# version:值为1~40的整数,控制二维码的大小(最小值是1,是个21×21的矩阵)
# error_correction:控制二维码的错误纠正功能。可取值下列4个常量:
'''
qrcode.constants.ERROR_CORRECT_X:
1. X=L时,大约7%或更少的错误能被纠正。
2. X=M(默认)时,大约15%或更少的错误能被纠正。
3. X=Q时,25%以下的错误会被纠正。
4. X=H时,大约30%或更少的错误能被纠正。
'''
# box_size:控制二维码中每个小格子包含的像素数。
# border:控制边框(二维码与图片边界的距离)包含的格子数(默认为4)
# 向二维码中添加信息
qr.add_data("https://blog.csdn.net/qq_52385631?spm=1010.2135.3001.5421")
qr.make(fit=True)
img = qr.make_image()
# 二维码设置为彩色
img = img.convert('RGBA')
# 打开logo图片
logo = Image.open(logo_path)
# 二维码尺寸
img_w, img_h = img.size
# 默认LOGO最大设为图片的1/4
factor = 4
# 最大logo尺寸
size_w = int(img_w / factor)
size_h = int(img_h / factor)
# logo的尺寸
logo_w, logo_h = logo.size
if logo_w > size_w or logo_h > size_h:
logo_w = size_w
logo_h = size_h
logo = logo.resize((logo_w, logo_h), Image.ANTIALIAS).convert('RGBA')
l_w = int((img_w - logo_w) / 2)
l_h = int((img_h - logo_h) / 2)
# 替换指定位置
img.paste(logo, (l_w, l_h), logo)
img.show()
img.save(save_path)
logo_path = r'D:\luffy\luffy_api\scripts\img\3.jpg'
save_path = os.path.join(os.path.dirname(settings.BASE_DIR), 'scripts', 'a.jpg')
main(logo_path=logo_path, save_path=save_path) # 调用main()函数