2017-08-01 127 views
1

我想将PIL.ImageTk.PhotoImage保存到文件中。我的方法是创建一个“打开”文件并调用“写入”方法,但它不会工作,因为我不知道如何从对象中获取字节数组。如何将PIL.ImageTk.PhotoImage保存为jpg

def store_temp_image(data, image): 
    new_file_name = data.number + ".jpg" 
    with open(os.path.join("/tmp/myapp", new_file_name), mode='wb+') as output: 
     output.write(image) 

错误消息如下:

TypeError: a bytes-like object is required, not 'PhotoImage' 

我经常发现的方法来转换ImageTk对象为PIL的对象,而不是倒过来。从文档我都不能得到任何提示。

回答

0

看一看这个...

http://pillow.readthedocs.io/en/3.1.x/reference/ImageTk.html#PIL.ImageTk.PhotoImage

从那里你可以得到包括Image对象。其中有一个save(...)方法可以完成您期望的工作。

http://pillow.readthedocs.io/en/3.1.x/reference/Image.html#PIL.Image.Image.save

因此,这(未经测试)的代码应该做的工作:

def store_temp_image(data, image): 
    new_file_name = data.number + ".jpg" 
    new_file_path = os.path.join('/tmp/myapp', new_file_name) 
    image.image.save(new_file_path) 

希望这有助于!

+0

谢谢。代码无效,但它帮助我学习,我可以简单地连接对象链,直到从另一个类到达正确的Image.Image对象。但我仍然没有找到将PhotoImage转换为Image对象的方法。我必须调用“新”方法吗?如何正确传递对象? – Semo