簡體   English   中英

如何在base64字符串和numpy數組之間進行編碼和解碼?

[英]How to encode and decode between base64 string and numpy array?

StackOverflow上已經有幾種解決方案,可以對圖像和base64字符串進行解碼和編碼。 但是它們中的大多數都需要磁盤之間的IO,這很浪費時間。 是否有僅在內存中進行編碼和解碼的解決方案?

編碼方式

關鍵是如何通過編碼(例如JPEG或PNG編碼,而不是base64編碼)將numpy數組轉換為bytes對象。 當然,我們可以通過使用imsaveimread保存和讀取圖像來做到這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安裝imageio

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM