如何在base64字符串和numpy数组之间进行编码和解码?

huangbiubiu

StackOverflow上已经有几种解决方案,可以对图像和base64字符串进行解码和编码。但是它们中的大多数都需要磁盘之间的IO,这很浪费时间。是否有仅在内存中进行编码和解码的解决方案?

huangbiubiu

编码方式

关键是如何将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该插件imageioskimage提供了这样的方法:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章