提取base64格式二维码中的内容

提取base64格式二维码中的内容

利用zbar 提取二维码中的内容

import zbar
import base64
try:
from PIL import Image, ImageEnhance
except:
import Image
import io
def decode(filename=None):
“”"
:param filename: base64编码的二维码
:return: 二维码的内容
“”"
scanner = zbar.ImageScanner()
scanner.parse_config(‘enable’)
img_b64decode = base64.b64decode(filename)
image = io.BytesIO(img_b64decode)

pil = Image.open(image).convert('L')

width, height = pil.size
try:
    raw = pil.tobytes()
except AttributeError:
    raw = pil.tostring()
    # wrap image data
image = zbar.Image(width, height, 'Y800', raw)
    # scan the image for barcodes
result = scanner.scan(image)
    # extract results
if result == 0:
    return False
else:
    for symbol in image:
        pass
        # clean up
    del(image)
        # Assuming data is encoded in utf8
    data = symbol.data.decode(u'utf-8')
    return data

但是有时候zbar scan 二维码时识别不了,这时候需要增加二维码的对比度

pil = ImageEnhance.Brightness(pil).enhance(2.0) # 增加亮度

# pil = ImageEnhance.Sharpness(pil).enhance(17.0)  # 锐利化
pil = ImageEnhance.Contrast(pil).enhance(4.0)  # 增加对比度

完整代码

coding: utf-8
import zbar
import base64
try:
from PIL import Image, ImageEnhance
except:
import Image
import io
def decode(filename=None):
“”"
:param filename: base64编码的二维码
:return: 二维码的内容
“”"
scanner = zbar.ImageScanner()
scanner.parse_config(‘enable’)
img_b64decode = base64.b64decode(filename)
image = io.BytesIO(img_b64decode)

pil = Image.open(image).convert('L')
# pil = ImageEnhance.Brightness(pil).enhance(2.0)  # 增加亮度
# pil = ImageEnhance.Sharpness(pil).enhance(17.0)  # 锐利化
pil = ImageEnhance.Contrast(pil).enhance(4.0)  # 增加对比度
width, height = pil.size
try:
    raw = pil.tobytes()
except AttributeError:
    raw = pil.tostring()
    # wrap image data
image = zbar.Image(width, height, 'Y800', raw)
    # scan the image for barcodes
result = scanner.scan(image)
    # extract results
if result == 0:
    return False
else:
    for symbol in image:
        pass
        # clean up
    del(image)
        # Assuming data is encoded in utf8
    data = symbol.data.decode(u'utf-8')
    return data
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值