【问题标题】:Pickleable Image Object可腌制图像对象
【发布时间】:2012-04-12 05:49:11
【问题描述】:

如何从 PIL Image 对象创建一个 pickleable 文件,以便您可以将这些图像保存为单个 pickle 文件,然后上传到另一台计算机,例如运行 PIL 的服务器并在那里解压它?

【问题讨论】:

    标签: python python-imaging-library pickle


    【解决方案1】:

    您可以将 Image 对象转换为数据,然后您可以腌制它:

    image = {
        'pixels': im.tostring(),
        'size': im.size,
        'mode': im.mode,
    }
    

    然后回到图像:

    im = Image.fromstring(image['mode'], image['size'], image['pixels'])
    

    注意:正如astex 所提到的,如果您使用的是 Pillow(建议使用 Pillow,而不是 PIL),则 tobytes() 不推荐使用 tostring() 方法。对于frombytes()fromstring() 也是如此。

    【讨论】:

    • Image.tostring() 现在在Pillow 中被弃用,取而代之的是Image.tobytes()。为后人着想,可能还是把上面的改一改(或者至少留个注)吧。
    【解决方案2】:

    Gerald 使用关键字 args 的回答略有不同

    创建可腌制对象

    image = {'data': im.tostring(), 'size':im.size, 'mode':im.mode}
    

    image = dict(data=im.tostring(), size=im.size, mode=im.mode)
    

    解压回到图像

    im = Image.fromstring(**image)
    

    【讨论】:

    • 这是否意味着我不需要在我的应用程序中存储图像?当我想使用图像时,我可以只使用它们序列化的字符串并在应用程序中对其进行硬编码吗?
    • 您在技术上可以这样做,但最好将其保留为实际文件...在任何一种情况下,它都可以与您的代码一起进行版本控制,但有图像保存为图像意味着您可以轻松查看它们并知道您存储了哪些媒体。如果您将图像存储为代码,则会人为地夸大源文件的大小,使查看和搜索变得更加繁琐,并且在您想要查看和/或更改该图像时使您的媒体更难管理。
    猜你喜欢
    • 2014-09-26
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多