如何从 fastapi 响应返回 PIL 图像文件列表?

2024-05-23

我使用 fastapi 创建了一个rest-api,它将文档(pdf)作为输入并返回它的 jpeg 图像,我使用一个名为 docx2pdf 的库进行转换。

from docx2pdf import convert_to    
from fastapi import FastAPI, File, UploadFile

app = FastAPI()

@app.post("/file/convert")
async def convert(doc: UploadFile = File(...)):
    if doc.filename.endswith(".pdf"):
        # convert pdf to image
        with tempfile.TemporaryDirectory() as path:
            doc_results = convert_from_bytes(
                doc.file.read(), output_folder=path, dpi=350, thread_count=4
            )

            print(doc_results)

        return doc_results if doc_results else None

这是的输出doc_results,基本上是 PIL 图像文件的列表

[<PIL.PpmImagePlugin.PpmImageFile image mode=RGB size=2975x3850 at 0x7F5AB4C9F9D0>, <PIL.PpmImagePlugin.PpmImageFile image mode=RGB size=2975x3850 at 0x7F5AB4C9FB80>]

如果我运行当前的代码,它将返回 doc_results 作为 json 输出,并且我无法在另一个 API 中加载这些图像。

如何返回图像文件而不将其保存到本地存储?因此,我可以向此 api 发出请求并获取响应并直接处理图像。

另外,如果您知道我可以在上面的代码中进行任何改进以加快速度,也会很有帮助。

任何帮助表示赞赏。


除非将其转换为通用的东西,否则您无法返回它。

这基本上是说,你的内存中有一个 PIL 对象,这里是它的位置.

您能做的最好的事情是将它们转换为字节并返回字节数组。


您可以创建一个函数来获取 PIL 图像并从中返回字节值。

import io

def get_bytes_value(image):
    img_byte_arr = io.BytesIO()
    image.save(img_byte_arr, format='JPEG')
    return img_byte_arr.getvalue()

然后你可以在返回响应时使用这个函数。

return [get_bytes_value(image) for image in doc_results] if doc_results else None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 fastapi 响应返回 PIL 图像文件列表? 的相关文章

随机推荐

  • 从 ruby​​ 脚本运行另一个 ruby​​ 脚本

    在 ruby 中 是否可以指定使用与运行原始脚本相同的 ruby 解释器来调用另一个 ruby 脚本 例如 如果 a rb 运行 b rb 几次 是否可以替换 system ruby b rb foo bar 与类似的东西 run ruby
  • 是否可以在 UML 中可视化一堆函数

    我正在改进一个使用类和函数文件 只是包含各种函数的 php 文件 的内容管理系统 例如 我有一堂课叫Admin以及一个功能文件 其功能包括显示管理员概述 创建新管理员 编辑现有管理员 删除管理员 函数文件使用类并执行 mvc 概念的可视化部
  • 使用powershell获取快捷方式(.lnk)文件的目标

    我有一堆 lnk 文件 需要根据快捷方式指向的目标对它们进行不同的处理 我发现很少有关于如何使用其他语言执行此操作的信息 但没有找到有关使用 powershell 执行此操作的信息 我试过这个 sh New Object COM WScri
  • MySQL 组合两个查询

    我有两个 MySQL 查询 QUERY SELECT sodnik 1 FROM prihodnji krog WHERE file id 8778 AND sodnik 1 UNION SELECT sodnik 2 FROM priho
  • 在按顺序读取的多个特征文件上训练 Keras 模型以节省内存

    当我尝试读取大量功能文件时 我遇到了内存问题 见下文 我想我应该分割训练文件并按顺序读取它们 做到这一点的最佳方法是什么 x train np load path features x train npy y train np load p
  • Oracle Service Bus 中如何使用 WSDL?

    我使用 WSDL 创建了一个 OSB 服务并选择了一个绑定 现在 当我的客户尝试使用我提供的 WSDL 调用服务时 他们会收到错误 另外 我提供的 WSDL 中的绑定名称和他们从 URL 中提取的 WSDL 是不同的 怎么了 根据 OSB
  • 在kubernetes中使用pvc时如何避免覆盖容器目录?

    使用pvc持久化容器数据时 似乎pvc总是覆盖容器的目录 目录中的原始数据将不可用 请问是什么原因 这是设计使然 Kubelet 负责为容器准备安装 它们可以来自大量不同的存储后端 在挂载时它们是空的 kubelet 没有理由在其中放入任何
  • factory_girl + rspec 似乎并没有在每个示例后回滚更改

    类似于这里描述的问题 http rpheath com posts 411 how to use factory girl with rspec http rpheath com posts 411 how to use factory g
  • jqgrid inlineNav add - 在添加的行上显示保存图标

    我正在使用 jqgrid 的 inlineNav 选项向工具栏添加 添加 选项 我还使用操作格式化程序进行编辑和删除 当我添加新行时 新添加的行有一个编辑图标和一个取消图标 而保存图标位于添加旁边的工具栏上 有没有办法指定新添加的行具有保存
  • ido-mode 绑定被全局设置键屏蔽

    堆栈溢出 在过去的几天里 我试图稍微定制一下我的 emacs 但我遇到了我不知道如何解决的问题 我想做的是定义一个全局键绑定和一个 ido 模式键绑定 它们将使用相同的键来做不同的事情 Ido 模式键绑定定义如下 defun ido my
  • MS Access - 拆分数据库上出现“文件已在使用中”错误

    我在 Windows 7 上的 MS Access 2010 中有一个拆分数据库 后端位于网络驱动器上的一个文件夹中 只有某些人具有写入权限 每个人都有读取权限 每个用户都有自己的前端副本存储在其本地计算机上 BE 和 FE 均设置为对所有
  • IDA pro asm 指令更改

    我只是想知道我怎样才能 更改IDA视图A中的asm指令 如何编辑指令 对于 实例 jnz 到 jmp 如何插入新指令 call func1 调用 func2 插入到现有的 代码 我知道如何制作 diff 文件 我知道如何在我的 DLL 上应
  • Python:创建登录系统[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想使用 python 创建一个登录
  • 使用 JSF 2.0 Ajax 响应访问 bean 函数的返回值?

    我正在使用 JSF 2 0 构建一个调度应用程序 用户可以在其中将项目添加到日历中 然后编辑这些对象 我广泛使用 AJAX 来防止页面刷新 我遇到的问题是从使用 AJAX 调用的函数中获取返回值
  • 在ABAP中显示消息语句内的变量

    如何在不使用消息类的情况下显示消息语句中的变量 IF acct bal lt min bal MESSAGE customer balance less than minimum Balance gt acct bal TYPE E END
  • java.lang.NoClassDefFoundError: com.itextpdf.text.Document

    我已将 jar 文件添加到现有项目中 如下所述http www vogella com articles Eclipse article html classpath http www vogella com articles Eclips
  • 为什么总是在 mouseDoubleClickEvent 之前调用 mousePressEvent

    请考虑以下代码 include
  • HTML Mobile - 强制软键盘隐藏[重复]

    这个问题在这里已经有答案了 我正在为一家优惠券公司开发前端网站 我有一个页面 用户只需输入电话号码和花费的美元 我们想出了一个有趣的内置 Javascript 屏幕键盘 它易于使用且快速 但是 我正在寻找一种解决方案 以在用户聚焦并在这些字
  • 在 Shiny 应用程序中更改 bsModal 的背景

    我正在开发一个 Shiny 应用程序 我需要确保最终用户不会意外关闭 bsModal 因为它上面有一些操作按钮 我做了一些研究并了解到我需要覆盖背景和键盘参数 但即使我看到了一些建议 我也不知道这到底需要放在我的代码中的哪里 我不精通 Ja
  • 如何从 fastapi 响应返回 PIL 图像文件列表?

    我使用 fastapi 创建了一个rest api 它将文档 pdf 作为输入并返回它的 jpeg 图像 我使用一个名为 docx2pdf 的库进行转换 from docx2pdf import convert to from fastap