gpt4 book ai didi

python - 在没有文件 I/O 的情况下使用 Tornado 服务图像

转载 作者:行者123 更新时间:2023-11-28 22:49:07 24 4
gpt4 key购买 nike

我正在尝试使用 Tornado 库提供网络摄像头图像,但我发现的唯一方法是先保存图像,然后返回图像名称。

有没有办法在不保存到磁盘的情况下提供图像?

import tornado.ioloop
import tornado.web
import pygame.camera
import pygame.image
from time import time
from io import StringIO

pygame.camera.init()
cam = pygame.camera.Camera(pygame.camera.list_cameras()[0])
cam.start()

class MainHandler(tornado.web.RequestHandler):
def get(self):


img = cam.get_image()
name = str( round( time() ) )
name = name + '.jpg'
pygame.image.save(img, name)


self.write('<img src="' + name + '">')



application = tornado.web.Application([
(r"/", MainHandler),
(r'/(.*)', tornado.web.StaticFileHandler, {'path': ''})
])

if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()

最佳答案

pygame好像不支持保存图片到类文件对象,所以不能直接使用。但是,它确实有一个 tostring方法。该文档指出它允许与其他图像库进行互操作:

Creates a string that can be transferred with the ‘fromstring’ method in other Python imaging packages

因此,您可以使用 tostring 将图像转换为字符串,然后使用另一个支持将图像写入类文件对象的 Python 库,并使用其 fromstring方法,

这是一个使用 pillow 的例子作为替代图像库。

import tornado.ioloop
import tornado.web
from PIL import Image
import cStringIO as StringIO

class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("<img src='http://localhost:8888/img'>")

class ImgHandler(tornado.web.RequestHandler):
img_name = "bg.jpg"
img = pygame.image.load(img_name)
str_img = pygame.image.tostring(img, "RGB")
size = img.get_size()
fimg = Image.frombytes("RGB", size, str_img, "raw")
fobj = StringIO.StringIO()
fimg.save(fobj, format="png") #jpeg encoder isn't available in my install...
for line in fobj.getvalue():
self.write(line)
self.set_header("Content-type", "image/png")


application = tornado.web.Application([
(r"/", MainHandler),
(r"/img", ImgHandler),
#(r'/(.*)', tornado.web.StaticFileHandler, {'path': ''})
])

if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()

localhost:8888localhost:8888/img 都会显示图片。

关于python - 在没有文件 I/O 的情况下使用 Tornado 服务图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24286618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com