如何从Python PIL图像对象获取字符串数据?
我正在尝试通过一个套接字把桌面上的gif文件数据发送到远程桌面(用于桌面共享),但是我用PIL库无法获取数据的字符串。我不知道怎么把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图片只显示了页面的上1/10(gif文件坏掉了),所以我在想问题出在我的电脑上还是我的代码上(我在一台非常旧的电脑上使用Vista,至少有6年了,我很快就会换一台新电脑)。任何建议都很感激。
1 个回答
1
正如@HYRY所说,你必须用“wb”模式打开图片文件,而不是用“w”模式。没有“b”这个字母,Python默认会以文本模式打开文件。在Windows系统中,这意味着每当你往文件里写入一个0x0a字节时,操作系统会把它变成0x0d 0x0a的组合,因为它会把换行符转换成Windows本地的换行符。
而在“wb”模式下,就没有这种转换,你的图片文件就不会被损坏。