使用Python Flask和Azure Blob优化和调整从用户收到的图像大小



我正在我的web应用程序(Python Flask)上从用户那里获得扫描/拍摄的图像,该应用程序存储在Azure Blob中。我需要将所有图像推广到标准分辨率,同时减少文件大小。我打算在这些图像上应用OCR,因此保持图像质量也很重要

在将图像存储在Azure Blob上之前,我需要在我的服务器(python-flask)上执行此操作。我发现像picopt这样的库并没有直接解决这个问题。还有一些可用的脚本可以从控制台调用,但我需要每次都自动执行它们。

很抱歉在这里太天真了,但有人能提出一个解决方案吗?这样我就可以在python flask应用程序中做到这一点了?

我正在读file = request.files['file']的文件。我想在不保存的情况下对图像进行处理,因为我将把它存储在Azure Blob中。

目标

  • 单色图像(Binarize)
  • 图像压缩
  • 保持纵横比

枕头怎么样?它是一个通用的图像实用程序模块,特别是使用Image.resize,您可以随心所欲。

图像处理是一项复杂且耗时的操作。在您的请求处理程序中执行"可用脚本"或Pillow(如@reptilicus所建议的)不是一个好主意,因为它们会占用资源很长时间,并会限制您的应用程序性能。但您可以设置一个Celery实例,并在后台启动图像处理任务。图像处理任务完成后,您可以启动另一个任务,将调整大小的图像上载到Azure Blob。您将能够重试任务并执行更多操作。类似的应用程序设置将提供健壮性和可扩展性。

在Azure上,处理图像的常用方法是将WebJob与Azure存储队列结合使用。

您可以尝试先将上传的图像存储到Azure存储队列中,然后使用WebJob作为后台任务从存储队列中检索图像进行逐一处理,并将处理后的图像存储在Azure存储Blob中。

作为参考,您可以看到文档Run Background tasks with WebJobs和How to use Queue storage from Python来了解它们。

希望能有所帮助。如有任何问题,请随时通知我。

最新更新