2016-11-26 9 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を使用していますか? (編集:python 2.7、タグ内にあった、ごめんなさい)どんな場合でも:画像ファイルはほとんど常にテキストではないので、それをそのまま扱うことはできません。

  • これはまた、あなたが直接バイナリ(バイト)を送信し、ソケット経由で送信する前にstrに変換していないバイナリとして代わりにテキストモードで画像データを読み込み、そのdata = open("image.jpg", "rb").read()
  • を使用しなければならないことを意味代わりに。
  • 受信側(あなたのクライアントですか?)recvソケットからのバイト。私はImage.frombytesを使って直接そこからイメージを作成し、それを表示することができると思います。別の方法として、ソケットから取得したバイトを新しいファイルに書き込んでください( "wb"バイナリモードで開くことを確かめてください)。Image.open()そのファイル。
+0

彼はおそらくPython 2を使用しているので、彼はおそらくPython 2を使用しています。 – tambre

+0

私は 'rb'にそれを缶詰めし、それはより良く動作するようですが、Image.frombytes 3つの引数 - (モード、サイズ、展開されたピクセルデータ)が必要ですが、どのように私がこれら3つを知ることができないのか分かりません。 (最後のものが何を意味しているかわからなくても)。どのように私はそれらの議論を知ることができる? – DesTeco

+0

'' Image.frombytes''を忘れてしまいました(これはあなたがここで扱っているものではありません)。イメージバイトを保存し、それを読むために '' Image.open''を使います。ファイルを作成する必要がないようにするには、メモリバイトバッファから直接読み取るために '' io.BytesIO''を使うことができます。 –

関連する問題