how to serve image files without disk use?

Chris Mellon arkanes at gmail.com
Fri Dec 29 10:30:53 EST 2006


On 12/28/06, Ray Schumacher <rays at blue-cove.com> wrote:
> 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.
>

wx.Image.GetData() returns the raw image data as a Python string.



More information about the Python-list mailing list