ポート 5003 でデータを送信するこの画像サーバーがあります。送信するデータの形式は次のとおりです。画像タイプの 1 バイト (0 = raw、1 = JPEG) 次に、画像サイズの次の 4 バイト、その後に次の順序で n バイトがあります。幅は 2 バイト、高さは 2 バイト、B は 1 バイト、R は 1 バイト、G は 1 バイトです。
だから私がやろうとしているのは、データを取得し、次のコードで画像に変換することです:
#! /usr/bin/python
import socket
import sys
import binascii
from PIL import Image
from StringIO import StringIO
# Connect to the server image
serverHost = 'localhost'
serverPort = 5003
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((serverHost, serverPort))
print >>sys.stderr, 'Connecting to host: ' + str(serverHost)
print >>sys.stderr, 'and server Port: ' + str(serverPort)
s.settimeout(1)
#Receive the image type
imageType = s.recv(1)
print>>sys.stderr, 'received %r' %binascii.hexlify(imageType)
print>>sys.stderr, 'Unpacked: ', int(binascii.hexlify(imageType), 16)
received = imageType.__len__()
print>> sys.stderr, "Received: ", received
#Receive the image size
imageSize = s.recv(4)
print>>sys.stderr, 'received %r' %binascii.hexlify(imageSize)
print>>sys.stderr, 'Unpacked: ', int(binascii.hexlify(imageSize), 16)
received = imageSize.__len__()
print>> sys.stderr, "Received: ", received
#Receive the image Data
imageData = ''
received =0
while(received < int(binascii.hexlify(imageSize), 16)):
buffer = s.recv(4096)
imageData += buffer
received += buffer.__len__()
print>> sys.stderr, "Received: ", received
img = Image.fromstring('RGB', (1280, 720), imageData, 'raw')
#img = Image.open(StringIO(binascii.hexlify(imageData)))
img = img.convert('RGB')
img.save('out.png')
#file = open('test.png', 'w');
#file.write(imageData)
#file.close()
#When we receive the image, we send the acknowledgement
s.send('OK')
s.close()`enter code here`
しかし、コードを実行するたびに、常にこの種のエラーが発生します
"Value error not enough Image Data"
そして変わるなら
img = Image.fromstring('RGB', (1280, 720), imageData, 'raw')
に
img = Image.fromstring('BRG', (1280, 720), imageData, 'raw')
次のエラーが表示されます。
Value error: Unrecognized mode,
この種の問題を解決する方法を知っている人はいますか?