一、一般二维码

python的qrcode库生成二维码  圆角logo二维码 myqr库生成动态二维码_圆角

qrcode是个用来生成二维码图片的第三方模块,先安装:

pip install qrcode

import qrcode
def process(self, msgs, user=None):
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(msgs.value)
qr.make(fit=True)
img = qr.make_image()
filemgr = FileMgr('log/wechat_files/')
img_path = filemgr.make_path('.png')
img.save(img_path)
return TaskRsp(end=True,msgs=[TypedMessage(type='pic', value=img_path)])

QRCode参数详细说明:

  • version: 一个整数,范围为1到40,表示二维码的大小(最小值是1,是个12×12的矩阵),如果想让程序自动生成,将值设置为 None 并使用 fit=True 参数即可。
  • error_correction: 二维码的纠错范围,可以选择4个常量:
    ERROR_CORRECT_L 7%以下的错误会被纠正
    ERROR_CORRECT_M (default) 15%以下的错误会被纠正
    ERROR_CORRECT_Q 25 %以下的错误会被纠正
    ERROR_CORRECT_H. 30%以下的错误会被纠正
  • boxsize: 每个点(方块)中的像素个数
  • border: 二维码距图像外围边框距离,默认为4,而且相关规定最小为4

二、内置圆角logo的二维码

一般的二维码太丑,需要内置一个logo,为了美观还要对logo进行圆角处理

python的qrcode库生成二维码  圆角logo二维码 myqr库生成动态二维码_二维码_02

import qrcode
from PIL import Image, ImageDraw
# 设置圆角
def circle_crop_image(im, radii):
# 创建一个黑色背景的画布
circle = Image.new('L', (radii * 2, radii * 2), 0)
# 画黑色方形
draw = ImageDraw.Draw(circle)
# 画白色圆形
draw.ellipse((0, 0, radii * 2, radii * 2), fill=255)
# 把原图转换成RGBA模式,增加alpha通道
img = im.convert("RGBA")
w, h = img.size
# 画4个角(将整圆分离为4个部分)再粘贴到alpha通道
alpha = Image.new('L', img.size, 255)
# 左上角
alpha.paste(circle.crop((0, 0, radii, radii)), (0, 0))
# 右上角
alpha.paste(circle.crop((radii, 0, radii * 2, radii)), (w - radii, 0))
# 右下角
alpha.paste(circle.crop((radii, radii, radii * 2, radii * 2)), (w - radii, h - radii))
# 左下角
alpha.paste(circle.crop((0, radii, radii, radii * 2)), (0, h - radii))
# 白色区域透明可见,黑色区域不可见
img.putalpha(alpha)
return img

# 生成二维码
def create_qr_code(url):
qr = qrcode.QRCode(
version=2,
# 设置容错率为最高
error_correction=qrcode.ERROR_CORRECT_H,
box_size=10,
border=1,
)
qr.add_data(url)
qr.make(fit=True)
# 创建二维码图片
img = qr.make_image()
# 图片转换为RGBA格式
img = img.convert("RGBA")
# 打开logo图片
icon = Image.open('log/wechat_files/222.png')
# 把RGB的图转换成RGBA模式,处理alpha透明通道(后边替换透明为白色)
icon = icon.convert("RGBA")
w, h = img.size
icon_w, icon_h = icon.size
# logo大小超过100的压缩到100,这个可以自己设置,影响logo的大小
if icon_w > 111:
icon = icon.resize((111, 111), Image.ANTIALIAS)
icon_w, icon_h = icon.size
w = int((w - 111) / 2)
h = int((h - 111) / 2)
else:
w = int((w - icon_w) / 2)
h = int((h - icon_h) / 2)
# 把png背景色转换为白色,避免处理裁剪圆角时出现黑边
w_d = Image.new('RGBA', icon.size, (255, 255, 255))
w_d.paste(icon, (0, 0, icon_w, icon_h), icon)
# r = icon_w // 15
# 圆角半径
r = 15
icon = circle_crop_image(w_d, r)
# 白底图,15的数值影响白色底图的大小
white_img = Image.new("RGBA", (icon_w + 15, icon_h + 15), (255, 255, 255))
white_img = circle_crop_image(white_img, r)
# 灰底图
gray_img = Image.new("RGBA", (icon_w + 2, icon_h + 2), (230, 230, 230))
# 灰底图圆角处理
gray_img = circle_crop_image(gray_img, r)
# 粘贴灰底图
white_img.paste(gray_img, (2, 2), gray_img)
# 粘贴白图
img.paste(white_img, (w - 2, h - 2), white_img)
# 粘贴icon,(w + 5, h + 5)为左上角坐标,数值大小配合white_img的数值大小调整,影响白色边框的宽度
img.paste(icon, (w + 5, h + 5), icon)
img_path = 'D:\\xxoo.png'
img.save(img_path, quality=100)
# img.show()
print(img_path)
return img_path

create_qr_code('www.baidu.com')

三、myqr库生成动态二维码

图片本来是动态的,到这就不懂了,哈哈

python的qrcode库生成二维码  圆角logo二维码 myqr库生成动态二维码_ico_03

from MyQR import myqr
def get_qrcode(dir):
img_path = 'D:\\xxoo.png'print(img_path)
myqr.run(words=dir, # words中填写链接或者文本内容
version=3, # 控制二维码大小 1~40,建议不要超过5,否则生成时间太长
level='H', # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
picture='log/wechat_files/111.gif', # 背景图片,格式可以是.jpg, .png, .bmp, .gif
colorized=True, # 可以使产生的图片由黑白(False)变为彩色(True)的
contrast=1.3, # 用以调节图片的对比度,1.0 表示原始图片,更小的值表示更低对比度,更大反之。默认为1.0。
brightness=1.3, # 用来调节图片的亮度
save_dir='log/wechat_files/',) # 保存目录
# get_qrcode('http://www.baidu.com')

 下面来个骚的,效果自己去看吧,哈哈,泡妹子神器:

from MyQR import myqr

def get_qrcode(dir):
myqr.run(words=dir, # words中填写链接
version=3, # 控制二维码大小 1~40,建议不要超过5,否则生成时间太长
level='H', # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
picture='timg.gif', # 你想放的动态图片path,网上下载就好了,
colorized=True, # 可以使产生的图片由黑白(False)变为彩色(True)的
contrast=1.3, # 用以调节图片的对比度,1.0 表示原始图片,更小的值表示更低对比度,更大反之。默认为1.0。
brightness=1.3, # 用来调节图片的亮度
save_dir='log/wechat_files/',) # 保存目录
get_qrcode('https://a.scene.eprezi.com/s/XteInz0v?adpop=1')

参考: