Python 任意网址转换为二维码

发布时间:2021-12-03 公开文章

背景

网站一个新功能需要用到网址转换二维码,不需要花里胡哨的功能, 也不需要保存到服务器占用1B空间,用户需要即传输图片字节集。

需要安装myqr库,这个作者比较懒,我就顺头摸瓜,重新构造一下!

pip install myqr  -i https://pypi.tuna.tsinghua.edu.cn/simple 

 

代码

Talk is cheap

 

from MyQR.mylibs import data, ECC, structure, matrix, draw
from PIL import Image
from io import BytesIO
import base64
def get_qrcode(url,scale=1):
    ver=1
    ecl='H'
    ver, data_codewords = data.encode(ver, ecl, url)
    ecc = ECC.encode(ver, ecl, data_codewords)
    final_bits = structure.structure_final_bits(ver, ecl, data_codewords, ecc)
    qrmatrix = matrix.get_qrmatrix(ver, ecl, final_bits)
    unit_len = 3

    x = y = 4*unit_len
    pic = Image.new('1', [(len(qrmatrix)+8)*unit_len]*2, 'white')
    def draw_a_black_unit(p, x, y, ul):
        for i in range(ul):
            for j in range(ul):
                p.putpixel((x+i, y+j), 0)    
    for line in qrmatrix:
        for module in line:
            if module:
                draw_a_black_unit(pic, x, y, unit_len)
            x += unit_len
        x, y = 4*unit_len, y+unit_len
    size = (pic.size[0]*scale,pic.size[1]*scale)
    return pic.resize(size,Image.ANTIALIAS)
def im_2_b64(image):
    buff = BytesIO()
    image.save(buff, format="JPEG")
    img_str = base64.b64encode(buff.getvalue())
    img_str = str(img_str, "utf-8")
    return img_str