I have a byte sequence, that consists of image data . The image data is a 4 channel matrix. The byte sequence looks like this --
b'33333\xf3#@33333\xf3#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x99\x99\x99\x99\x99\xd9#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x00\x00\x00\x00\x00\xc0#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@fffff\xa6#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\xcd\xcc\xcc\xcc\xcc\x8c#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@33333s#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x99\x99\x99\x99\x99Y#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x00\x00\x00\x00\x00@#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@fffff&#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\xcd\xcc\xcc\xcc\xcc\x0c#@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@33333\xf3"@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x99\x99\x99\x99\x99\xd9"@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x00\x00\x00\x00\x00\xc0"@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@fffff\xa6"@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\xcd\xcc\xcc\xcc\xcc\x8c"@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@33333s"@\x00\x00\x00\x00\x00\x00\xf8\x7f\x00\x00\x00\x00\x00\x00\xf8\x7f33333\xf3#@\x99\x99\x99\x99\x99Y
Ofcourse its not complete, because its a string with 400X400 with 4 channel and each channel is 4 bytes float.
I can see the byte sequence, but how do I reconvert it into an image file using python?
CodePudding user response:
Here's one way.
import array
data = array.array('d')
data.fromstring(yourdata)
When I run this on your string, I get:
array('d', [9.975, 9.975, nan, nan, 9.975, 9.924999999999999, nan, nan, 9.975, 9.875, nan, nan, 9.975, 9.825, nan, nan, 9.975, 9.775, nan, nan, 9.975, 9.725, nan, nan, 9.975, 9.674999999999999, nan, nan, 9.975, 9.625, nan, nan, 9.975, 9.575, nan, nan, 9.975, 9.525, nan, nan, 9.975, 9.475, nan, nan, 9.975, 9.424999999999999, nan, nan, 9.975, 9.375, nan, nan, 9.975, 9.325, nan, nan, 9.975, 9.275, nan, nan, 9.975, 9.225, nan, nan, 9.975])
You then have the job of converting this to an [x,x,4] array. Numpy can help with that.
Followup
The first eight bytes are '33333\xf3#@'. In hex, that's 33 33 33 33 33 f3 23 40
. Converting to little endian, that's 0x4023f33333333333
. That happens to be the binary representation of the floating point number 9.975.