今天有一个问题就是需要将网络字节流或者是Image对象转化为二进制字节流数据,之后借助于base64模块实现编码最终post到服务接口端,这里没有过多要去讲解的,直接看实现就行。
from __future__ import division
'''
__Author__:沂水寒城
功能: Python PIL模块Image对象、字节流对象转二进制字节流
'''
import io
import os
import requests
from PIL import Image
import matplotlib.pyplot as plt
def image2Binary():
'''
Image对象转化为二进制字节流对象
'''
img=Image.open('a.png')
new=img.crop([0,67,400,340])
plt.clf()
plt.figure(figsize=(8,6))
plt.subplot(1,2,1)
plt.imshow(img)
plt.title("original")
plt.subplot(1,2,2)
plt.imshow(new)
plt.title("crop")
plt.show()
binary_str=open('a.png','rb').read()
img_byte=io.BytesIO()
new.save(img_byte,format='PNG')
binary_str2=img_byte.getvalue()
return binary_str,binary_str2
def bytes2Binary():
'''
网络字节流数据转化为二进制节流对象
'''
url="https://a.png"
response=requests.get(url)
im=Image.open(io.BytesIO(response.content))
img_byte=io.BytesIO()
im.save(img_byte,format='PNG')
binary_str=img_byte.getvalue()
return binary_str
if __name__ == '__main__':
binary_str,binary_str2=image2Binary()
binary_str=bytes2Binary()