提取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