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

时间:2016-01-07 18:03:33

标签: python azure flask image-resizing image-optimization

我正在使用我的网络应用程序(Python Flask)上的用户扫描/拍摄图像,其中存储在Azure Blob中。我需要将所有图像概括为标准分辨率,同时减小文件大小。 我打算在这些图像上应用OCR,因此保留图像质量也很重要。

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

很抱歉这里天真,但有人可以建议一个解决方案,所以我可以在python烧瓶应用程序中做到这一点吗?

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

目标

  • 单色图像(二值化)
  • 图片压缩
  • 保留宽高比

3 个答案:

答案 0 :(得分:0)

Pillow怎么样?它是一个通用的图像实用程序模块,特别是Image.resize,你可以做你想要的。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

希望它有所帮助。如有任何疑虑,请随时告诉我。