2012-01-12 155 views
0

我试图通过套接字发送到桌面的gif文件的数据到远程桌面(用于桌面共享),但我无法获取使用PIL的数据的字符串,我不知道如何将Pil对象转换为字符串,这里是我的代码(顺便说一句,我知道我可以只写入一个文件,然后读取这样的数据,但我认为这是效率低下,我认为也许有更好的方式?)。如何从python PIL图像对象获取字符串数据?

from PIL import ImageGrab 
    import cStringIO 
    fakie = cStringIO.StringIO() 
    ImageGrab.grab().save(fakie, 'GIF') 
    data = fakie.getvalue() 
    fakie.close() 
    # This last bit of code is to see if the var data stored the right info in a str bc i need to send it through a socket 
    with open('C:\something\something\Desktop\image.gif', 'w') as f: 
     f.write(data) 

的问题是,该文件被写入后的GIF图片只显示页面(GIF文件被搞砸)的顶部1/10,所以我想知道如果问题出在我的电脑或我的代码(我在一台非常旧的电脑上使用vista,至少6年,我想我很快就会收到一个新电脑)。任何输入赞赏。

+2

尝试用“wb”参数打开gif文件。 – HYRY 2012-01-12 04:25:02

+0

'Image.tostring()'方法怎么样? – wim 2012-01-12 04:37:57

+0

THANKs HYRY工作 – Baboon 2012-01-12 04:53:02

回答

1

正如@HYRY所说的,你必须用“wb”模式而不是“w”打开图像文件 - 没有“b”Python默认以文本模式打开它 - 在windows中意味着每当一个0x0a字节写入文件,操作系统而是写一个0x0d 0x0a序列,因为它将行结束序列转换为Windows本机行尾。

在“wb”模式下,没有翻译,并且您的图像文件不会被破坏。