R
Ray Schumacher
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
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