how to serve image files without disk use?

Ray Schumacher rays at blue-cove.com
Thu Dec 28 18:18:11 EST 2006


I'm trying to make a small camera server using VideoCapture.py and 
socket. I needed to construct a complete image file with headers etc 
for a browser to recognize it, but I couldn't find a combination of 
StringIO and wx image methods to avoid disk saves, without PIL.

If I save a temp.jpg file to disk I can serve the image easily:
...
self.cam = VideoCapture.Device(devnum=0, showVideoWindow=0)
buff, width, height = self.cam.dev.getbuffer()
im =  wx.EmptyImage(width, height)
im.SetData(buff)
im.Mirror().SaveFile('temp.jpg', wx.BITMAP_TYPE_JPEG)
...
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
while 1:
     data = conn.recv(1024)
     if data[:3] == 'GET':
         conn.send("HTTP/1.0 200 OK"+"\015\012")
         conn.send("Server: RJS_video/0.0.1"+"\015\012")
         conn.send("Content-type: image/bmp"+"\015\012")
         conn.send("Content-Length: "+str(352*288*3+256)+"\015\012")
         conn.send("\015\012")
         fh = file('temp.jpg', 'rb')
         conn.send(fh.read())
         fh.close()
     else: break

But, how can I avoid disk writes? wx's *.SaveFile() needs a string 
file name (no objects).
I'm going to investigate PIL's im.save(), as it appears to allow 
file-objects.


Ray




More information about the Python-list mailing list