StackOverflow上已经有几个解决方案来解码和编码image和base64字符串。但是大多数都需要磁盘之间的IO,这是浪费时间。是否有任何解码器只能在内存中进行编码和解码?
答案 0 :(得分:2)
关键是如何使用编码将numpy数组转换为bytes
对象(例如JPEG或PNG编码,而不是base64编码)。当然,我们可以通过使用imsave
和imread
保存和阅读图片来实现此目的,但PIL提供了更直接的方法:
from PIL import Image
import skimage
import base64
def encode(image) -> str:
# convert image to bytes
with BytesIO() as output_bytes:
PIL_image = Image.fromarray(skimage.img_as_ubyte(image))
PIL_image.save(output_bytes, 'JPEG') # Note JPG is not a vaild type here
bytes_data = output_bytes.getvalue()
# encode bytes to base64 string
base64_str = str(base64.b64encode(bytes_data), 'utf-8')
return base64_str
这里的关键问题是如何从解码的bytes
中读取图像。 imageio
中的插件skimage
提供了这样一种方法:
import base64
import skimage.io
def decode(base64_string):
if isinstance(base64_string, bytes):
base64_string = base64_string.decode("utf-8")
imgdata = base64.b64decode(base64_string)
img = skimage.io.imread(imgdata, plugin='imageio')
return img
请注意,上面的方法需要python包imageio
,可以通过pip安装:
pip install imageio