Теперь я отправляю байт изображения с клиента C# на сервер python.
На данный момент это мой код C#.
private byte[] JPGSerialize(byte[] jpgbytes)
{
byte[] data = null;
using (MemoryStream stream = new MemoryStream())
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(jpgbytes.Length);
writer.Write(jpgbytes); // Encoding type JPG
stream.Position = 0;
data = new byte[stream.Length];
stream.Read(data, 0, data.Length);
}
}
return data;
}
Я хочу сначала включить длину двоичного потока.
Поскольку я использую TCP для связи, мне нужно убедиться, что все данные передаются или нет.
И я получу это на сервере python, преобразую в изображение и попытаюсь получить значение цвета в пикселях.
Это моя часть кода python.
while True:
Received_data = client_socket.recv(4096) # type is bytes
# need to divide
img = Image.open(io.BytesIO(Received_data[1:])) # it is right?
# I got this error
# "cannot identify image file %r" % (filename if filename else fp)
# PIL.UnidentifiedImageError: cannot identify image file
# <_io.BytesIO object at 0x000001EFA3E5DCA8>
pixels = np.array(img)
Обычно данные передаются в виде байтов типа
, и мне нужно разделить байты длины / jpg.
Я знаю, как это сделать на C#. Поэтому я выполнил поиск.
ReadInt (), ReadByte (), ReadString () и др. c. в Python?
Итак, я проверил это и сослался на ответы с наибольшим количеством голосов. Это было похоже на то, как это делает C#.
Но я получил эту ошибку: «объект байтов не имеет атрибута чтения»
Я искал вопросы, связанные с этим, но, похоже, они отличаться от моего случая. (например, JSON анализ)
Я хочу знать, существует ли такой код, который использует Python.
https://docs.microsoft.com/en-us/dotnet/api/system.io.binaryreader?view=netframework-4.8
Итак, мой вопрос:
Чтобы разделить предоставленный тип данных байтов
Для преобразования байтов в изображение