【发布时间】:2017-09-04 18:14:41
【问题描述】:
我基本上需要做this,但是用 Python 而不是 Javascript。我从 socketio 连接接收到一个 base64 编码的字符串,将其转换为 uint8 并处理它,然后需要将其转换为 base64 字符串,以便我可以将其发回。
所以,到目前为止,我已经得到了这个(我正在从 socketio 服务器获取data 字典):
import pickle
import base64
from io import BytesIO
from PIL import Image
base64_image_string = data["image"]
image = Image.open(BytesIO(base64.b64decode(base64_image_string)))
img = np.array(image)
如何反转这个过程以从img 回到base64_image_string?
更新:
我已经通过以下方式解决了这个问题(继续上面的代码 sn-p):
pil_img = Image.fromarray(img)
buff = BytesIO()
pil_img.save(buff, format="JPEG")
new_image_string = base64.b64encode(buff.getvalue()).decode("utf-8")
有点令人困惑,new_image_string 与 base64_image_string 不完全相同,但从 new_image_string 渲染的图像看起来相同,所以我很满意!
【问题讨论】:
-
看来
save到JPEG是一个损失函数。然后解码的图像字符串不再等同于原始图像。 -
@MeadowMuffins 使用另一种无损格式,例如 PNG