2012-01-12 159 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」模式下,沒有翻譯,並且您的圖像文件不會被破壞。