StackOverflow上已经有几种解决方案,可以对图像和base64字符串进行解码和编码。但是它们中的大多数都需要磁盘之间的IO,这很浪费时间。是否有仅在内存中进行编码和解码的解决方案?
关键是如何将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
请注意,上述方法需要imageio
可以通过pip安装的python软件包:
pip安装imageio
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句