PIL image to base64
最近有个做验证码的需求,要求直接返回图片base64编码后的数据
验证码是通过PIL的image生成的,不想image.save()保存一遍再打开
py3
import base64
from io import BytesIO
buffered = BytesIO()
image.save(buffered, format=“PNG”)
img_str = base64.b64encode(buffered.getvalue())
然后在html中把img_str替换掉就可以了。
1.安装python包
pip install Pillow
pip install python-barcode
生成条形码基本方法: https://pypi.org/project/python-barcode/0.8.1/
使用barcode生成图像PIL对象用于显示,或者 保存图像
import matplotlib.pyplot as plt
import barcode
from barcode.writer import ImageWriter
bar = barcode.get(u'code39', u"test123456",writer=ImageWriter())
output = bar.render(writer_options={"format": "PNG"}) #渲染生成图像对象
plt.imshow(output)
plt.axis('off') # 不显示坐标轴
plt.show()
bar.save("11",options={"format": "JPEG"})#保存图形里有渲染然后保存到文件
官网里有直接保存图像的方法:
name = barcode.generate(u'code128', u'test123456',writer=ImageWriter(), output='barcode_png')
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image
im = image.imread(name) # 读取图片文件
plt.imshow(im) # 显示图片
plt.axis('off') # 不显示坐标轴
plt.show()
os.remove(name)
上述方法:
参数write 为 NONE,保存图像文件格式则是 svg,
参数为ImageWrite()则默认图片格式是 PNG,需要改成JPEG等,则需要在options={“format”: “JPEG”},进行设置
EAN = barcode.get
_barcode_class('code128') # 参数为支持的格式 设置生成一维码的类型
ean = EAN(self_raising_code, writer=ImageWriter()) # , add_checksum=False
output = ean.render(
writer_options={'write_text': False, 'module_height': 8.0, 'module_width': 0.20}) # 渲染生成图像对象
buffered = BytesIO()
output.save(buffered, format="PNG")
barcode_64 = base64.b64encode(buffered.getvalue())
trade_status = 6
tmp_dict.update({
'self_raising_code': self_raising_code,
'trade_status': trade_status
})
```