Flask 烧瓶:更改内容物大小

Flask 烧瓶:更改内容物大小,flask,Flask,我有一个烧瓶路径,它返回一个视频提要。我想能够改变视频帧的大小。我该怎么做 def gen(stream): while True: try: frame = stream.get_last() if frame is not None: yield (b'--frame\r\n' b'Pragma-directive: no-cache\r\n'

我有一个烧瓶路径,它返回一个视频提要。我想能够改变视频帧的大小。我该怎么做

def gen(stream):
    while True:
        try:
            frame = stream.get_last()
            if frame is not None:
                yield (b'--frame\r\n'
                    b'Pragma-directive: no-cache\r\n'
                    b'Cache-directive: no-cache\r\n'
                    b'Cache-control: no-cache\r\n'
                    b'Pragma: no-cache\r\n'
                    b'Expires: 0\r\n'
                    b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
        except Exception as exception:
            # Output unexpected Exceptions.
            logging.error("Error occurred", exc_info=True)

@app.route('/video')
def video_feed():
    return Response(gen(RedisImageStream(conn, args)),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

如果只需要在视口中更改图像的大小,则可以编辑显示图像的代码。如果这是一个网站,也许你可以使用一些CSS配置

如果确实需要更改从服务器发送的图像的大小,则需要将每个图像加载到内存中,然后应用所需的转换,然后将其重新编码为JPEG。这在计算上是昂贵的,并且这是视频流中延迟的主要来源之一;事实上,YouTube和Twitch等视频流服务运行成本高昂的主要原因是,它们需要将传入的视频重新编码为多种分辨率,并实时发送出去

对于Python和JPEG图像,可以使用。下面是一个例子:

导入io
进口PIL
def缩小比例(图像、大小):
'''
接受图像的JPEG二进制表示形式,
并返回图像较小版本的JPEG
具有相同长宽比且不大于尺寸的。
'''
fp=io.BytesIO(image)#从提供的缓冲区创建一个类似文件的对象
im=PIL.图像(fp)
im_downscale=im.thumboil(size)#Image.thumboil创建的图像的较小版本不大于大小。
#如果这不是您想要的,请查看Image.transform
outp=io.BytesIO()#为输出创建空缓冲区
im_downscale.save(输出,“JPEG”)
bytestring=outp.getvalue()
通过测试环返回
然后,在您的
收益
行之前,调用:

frame=缩小比例(frame,(400300))