Writing byte stream as jpeg format to disk

Navkirat Singh navkirats at gmail.com
Thu Aug 26 17:17:05 EDT 2010


On 27-Aug-2010, at 1:57 AM, MRAB wrote:

> On 26/08/2010 21:14, Navkirat Singh wrote:
>> 
>> On 27-Aug-2010, at 1:32 AM, Dave Angel wrote:
>> 
>>> Navkirat Singh wrote:
>>>> Hey guys,
>>>> 
>>>> I am programming a webserver, I receive a jpeg file with the POST
>>>> method.The file (.jpeg) is encoded in bytes, I parse the bytes by
>>>> decoding them to a string. I wanted to know how i could write the
>>>> file (now a string) as a jpeg image on disk. When I try to encode the
>>>> same string to a bytes and write them in binary format to disk, the
>>>> file is not recognized as jpeg. I would be grateful if someone could
>>>> help me with this.
>>>> 
>>>> 
>>>> Regards,
>>>> Nav
>>> If by "decoding them to a string" you mean converting to Unicode, then
>>> you've already trashed the data. That's only valid if the bytes had
>>> been encoded from valid Unicode characters, and then only if you use
>>> the corresponding decoding technique.
>>> 
>>> If you mean some other decoding, then the question is meaningless
>>> without telling us just what the decoding is, preferably with some code.
>>> 
>>> It also might be useful to know what version of Python you're using,
>>> when you post the code.
>>> 
>>> DaveA
>>> 
>> 
>> Dave,
>> 
>> I am using Python3 and I receive a byte stream with a jpeg attached sent
>> by the web browser over a socket, which looks like this:
>> 
>> b': image/jpeg\r\nAccept: text/*\r\nReferer:
>> http://127.0.0.1:8001/\r\nAccept-Language: en-us\r\nAccept-Encoding:
>> gzip, deflate\r\nContent-Length: 91783\r\nConnection:
>> keep-alive\r\n\r\n\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00\x84\x00\x03\x02\x02\x03\x02\x02\x03\x03\x03\x03\x04\x03\x03\x04\x05\x08\x05\x05\x04\x04\x05\n\x07\x07\x06\x08\x0c\n\x0c\x0c\x0b\n\x0b\x0b\r\x0e\x12\x10\r\x0e\x11\x0e\x0b\x0b\x10\x16\x10\x11\x13\x14\x15\x15\x15\x0c\x0f
>> 
>> From the above, I need to:
>> 
>> a) Split the header content from the image content, which comes after
>> the keep-alive\r\n\r\n part
>> 
>> b) Then write the image content to file for further use as a jpeg.
>> 
> Try:
> 
>    image = header.split(b'keep-alive\r\n\r\n', 1)[-1]
>    open(image_path, 'wb').write(image)
> -- 
> http://mail.python.org/mailman/listinfo/python-list


Yay !! I figured it out....it was really very simple. And if I really feel guilty if I have wasted your time - @MRAB, @DAVE.

Here is what I needed to do:

a) Separate image content from header content of the byte stream received from the web browser.
b) Save the image content to disk for further use.

Here is what I did. Following is just a snippet:

	
	#-------------HERE IS WHERE I RECEIVE THE DATA
	while True:
		buff = socket.recv(8192)
		byteStr +=buff
		if not buff: break
	#--------------ENCODING/DECODING STARTS FROM HERE (since I want to use split/partition functions to separate header content from the image content)
	strMsg = byteStr.decode("ISO-8859-1")
	listMsg = strMsg.split('\r\n')
	#----------------------------
	# do some more processing to search the list for the image content, say supposing index is 11
	#---------------------------
	imageStr = listMsg[11].encode("ISO-8859-1") #Transform the byte string just the way I found it
	
	f = open('received.jpg','w'b)
	f.write(imageStr)

The resultant file is a jpg file.


Thanks,
Nav
	
	
	
	
	
	
	






More information about the Python-list mailing list