2016-11-26 130 views
0

我想從服務器發送圖像到客戶端,然後讓客戶端用show()顯示它,但我有一些問題。 這是發送圖片的服務器代碼:通過套接字發送圖像並顯示它

 im = ImageGrab.grab() 
     if not os.path.exists(r'C:\screens'): 
      os.makedirs(r'C:\screens') 
     im.save(r'C:\screens\screen.jpg') 
     data = open(r'C:\screens\screen.jpg', 'r') 
     data = data.read() 
     client_socket.send(str(data)) 

現在,很明顯我無法通過套接字發送一個文件,所以我必須把它作爲一個字符串,但後來,我不知道如何在客戶端使用show(),因爲你不能在一個字符串上使用show(),我不知道如何解決這個問題。 正如你可以看到我幾乎是一個Python初學者,所以如果解決方案簡單明瞭,我很抱歉。 我會感謝任何幫助,謝謝!

回答

1

你使用Python 2或3嗎? (編輯:蟒蛇2.7,是在標籤,對不起)無論如何:一個圖像文件幾乎總是不是文本,所以不要這樣對待它。

  • 這也意味着你必須讀取圖像數據作爲二進制的,而不是在文本模式下,所以用data = open("image.jpg", "rb").read()
  • 沒有轉換爲str在插座發送之前,發送二進制(字節)直接代替。
  • 在接收端(您的客戶端?)您recv來自套接字的字節。我想你可以使用Image.frombytes直接創建一個圖像並顯示它。或者,將從套接字獲得的字節寫入新文件(確保以「wb」二進制模式打開它)和Image.open()該文件。
+0

他有蟒蛇,2.7標籤,所以他很可能使用Python 2 – tambre

+0

即時通訊使用Python 2.7,現在我把它canged爲「RB」,它似乎更好地工作,但關於Image.frombytes - 它似乎它需要3個參數 - (模式,大小和解壓的像素數據),我不知道我怎麼能知道這三個。 (即使不知道最後一個是什麼意思)。我怎麼知道這些論點? – DesTeco

+0

好吧忘了''Image.frombytes''(它用於原始圖像數據,這不是你要處理的內容),只需保存圖像字節並使用Image.open來讀取它。爲了避免創建一個文件,你應該可以使用''io.BytesIO''來直接讀取內存中的字節緩衝區。 –

相關問題