二维码qrcode

'''pip3 install qrcode'''

import qrcode

img = qrcode.make('asfdagasdfasd')
img.save('123.png')

'''
version=None,
error_correction=constants.ERROR_CORRECT_M,
box_size=10, 
border=4,
image_factory=None,
mask_pattern=None




上面是按照qrcode默认生成的二维码


version 总共40个版本,最小的版本号为1,对应的尺寸为21*21,每加1  增加4个尺寸(二维码长宽被平均分为多少份)
error_correction
    ERROR_CORRECT_MM        15%    
    ERROR_CORRECT_LL        7%
    ERROR_CORRECT_QQ        25%    
    ERROR_CORRECT_HH        30%
border                  最小为4
box_size                生成图片的像素,
'''

qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=10,
    border=4
)
qr.add_data('czxxxxxxxxxxx')
qr.make(fit=True)
img = qr.make_image(fill_color='red', back_color='blue')  #
img.save('1234.png')

#########生成其他类型的二维码
'''
可以生成3中不同的SVG图像      
1、 用路径表示的SVG                  SvgPathImage              
2、  用矩形集合表示完整的SVG文件        SvgImage
3、  用矩形集合表示的SVG片段           SvgFragmentImage
'''

import qrcode
import qrcode.image.svg

method = ''

if method == 'basic':
    # 简单工厂
    factory = qrcode.image.svg.SvgImage
elif method == 'fragment':
    # 碎片工厂
    factory = qrcode.image.svg.SvgFragmentImage
else:
    # 组合路径工厂
    factory = qrcode.image.svg.SvgPathImage
    img = qrcode.make('xxasdasd', image_factory=factory)
#


# 默认背景为白色
# qrcode.image.svg.SvgFillImage
# qrcode.image.svg.SvgPathFillImage

 

 

 

 

 

 

 

 

# coding: utf-8
# pip3 install zbarlight    二维码解析包,py2.7以下版本
import qrcode
from PIL import Image
import os, sys
import zbar

def gen_qrcode(string, path, logo=""):
    """
    生成中间带logo的二维码
    需要安装qrcode, PIL库
    @参数 string: 二维码字符串
    @参数 path: 生成的二维码保存路径
    @参数 logo: logo文件路径
    @return: None
    """
    qr = qrcode.QRCode(
        version=2,
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        box_size=8,
        border=1
    )
    qr.add_data(string)
    qr.make(fit=True)
    img = qr.make_image()
    img = img.convert("RGBA")
    if logo and os.path.exists(logo):
        try:
            icon = Image.open(logo)
            img_w, img_h = img.size
        except Exception as e:
            print(e) 
            sys.exit(1)
        factor = 4
        size_w = int(img_w / factor)
        size_h = int(img_h / factor)

        icon_w, icon_h = icon.size
        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)

        w = int((img_w - icon_w) / 2)
        h = int((img_h - icon_h) / 2)
        icon = icon.convert("RGBA")
        img.paste(icon, (w, h), icon)
    img.save(path)
    # 调用系统命令打开图片
    # xdg - open(opens a file or URL in the user's preferred application)
    os.system('xdg-open %s' % path)


def decode_qrcode(path):
    """
    解析二维码信息
    @参数 path: 二维码图片路径
    @return: 二维码信息
    """
    # 创建图片扫描对象
    scanner = zbar.ImageScanner()
    # 设置对象属性
    scanner.parse_config('enable')
    # 打开含有二维码的图片
    img = Image.open(path).convert('L')
    # 获取图片的尺寸
    width, height = img.size
    # 建立zbar图片对象并扫描转换为字节信息
    qrCode = zbar.Image(width, height, 'Y800', img.tobytes())
    scanner.scan(qrCode)
    # 组装解码信息
    data = ''
    for s in qrCode:
        data += s.data
    # 删除图片对象
    del img
    # 输出解码结果
    return data


if __name__ == "__main__":
    info = "http://www.zut.edu.cn"
    pic_path = "qr.png"
    logo_path = "logo.png"
    #gen_qrcode(info, pic_path,logo_path )
    print(decode_qrcode(pic_path))

 

posted @ 2019-03-06 20:35  慕沁  阅读(940)  评论(0)    收藏  举报