我正在尝试通过套接字将桌面的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年我想,我很快就会得到一个新的)。任何意见都表示赞赏。
答案 0 :(得分:1)
正如@HYRY所说,你必须用“wb”模式而不是“w”打开图像文件 - 没有“b”Python默认以文本模式打开它 - 在windows中它意味着每当一个0x0a字节是写入文件,操作系统写入0x0d 0x0a序列,因为它将行结束序列转换为Windows本机行结尾。
在“wb”模式下,没有翻译,您的图像文件也不会损坏。