【问题标题】:How do convert a PIL Image to JSON serializable string and Vice versa?如何将 PIL 图像转换为 JSON 可序列化字符串,反之亦然?
【发布时间】:2021-08-06 04:12:47
【问题描述】:

我有 PIL 图像,我想将它转换为 JSON 可序列化的字符串,然后我想将它转换回原来的 PIL 图像。我已经在 StackOverflow 上阅读了数百个问题和答案,但没有人能帮助我做我想做的事情。

一些答案​​说要使用 PIL 中的 tostring() 方法,该方法实际上现在已被贬值,现在是 tobytes(),它返回我无法直接放入 JSON 的字节对象。

然后他们中的一些人使用了base64.b64encode(),它也返回bytes对象并且仍然不兼容JSON。

请注意,我不希望将字符串直接存储到文件中,我想让它与 JSON 兼容,然后将其转换回原来的 PIL Image。

是的,我不想用Image.save() 保存它

【问题讨论】:

    标签: json python-3.x python-imaging-library


    【解决方案1】:

    您可以简单地将decode b64encoded 字节对象转换为字符串,即

    >>> image = b"1234567890"
    >>> base64.b64encode(image)
    b'MTIzNDU2Nzg5MA=='    # bytes
    >>> base64.b64encode(image).decode()
    'MTIzNDU2Nzg5MA=='     # string
    

    作为旁注,您还可以使用b85encode 来节省空间。

    【讨论】:

      【解决方案2】:

      根据 Selcuk 的回答,我创建了一个字符串并能够将其转换回图像,我做到了:

      from PIL import Image
      import base64
      
      image = Image.open("ptable.png")
      bytes = image.tobytes()
      
      
      mystr = base64.b64encode(bytes).decode()
      
      # _dict = {"bytes": bytes}
      
      newbytes = base64.b64decode(mystr)
      
      image = Image.frombytes("RGBA", (image.size), newbytes, "raw")
      image.show()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-10
        • 1970-01-01
        • 2012-05-01
        • 1970-01-01
        • 2011-05-27
        • 2019-06-02
        • 2017-03-10
        相关资源
        最近更新 更多