我正在使用我的网络应用程序(Python Flask)上的用户扫描/拍摄图像,其中存储在Azure Blob中。我需要将所有图像概括为标准分辨率,同时减小文件大小。 我打算在这些图像上应用OCR,因此保留图像质量也很重要。
在将图像存储在Azure Blob上之前,我需要在我的服务器(python flask)上执行此操作。我发现像picopt
这样的图书馆并没有直接解决这个问题。还有一些可用的脚本可以从控制台调用,但我需要每次都自动执行它们。
很抱歉这里天真,但有人可以建议一个解决方案,所以我可以在python烧瓶应用程序中做到这一点吗?
我正在通过file = request.files['file']
阅读该文件。我想在不保存的情况下对图像进行处理,因为我将它存储在Azure Blob中。
目标
答案 0 :(得分:0)
Pillow怎么样?它是一个通用的图像实用程序模块,特别是Image.resize
,你可以做你想要的。
答案 1 :(得分:0)
图像处理很复杂,通常很耗时。在请求的处理程序中执行“可用脚本”或Pillow(如@reptilicus建议的)并不是一个好主意,因为它们将长时间占用资源并限制应用程序性能。但是您可以设置Celery实例并在后台执行图像处理任务。完成图像处理任务后,您可以启动另一项任务,将已调整大小的图像上载到Azure Blob。您将能够重试任务并执行更多操作。类似的应用程序设置将提供稳健性和可扩展性。
答案 2 :(得分:0)
在Azure上,处理图像的常用方法是使用WebJob与Azure存储队列结合使用。
您可以尝试首先将上传图像存储到Azure存储队列中,然后从存储队列中检索图像,以使用WebJob作为后台任务逐个处理,并将处理后的图像存储到Azure存储队列中。
作为参考,您可以看到文档Run Background tasks with WebJobs和How to use Queue storage from Python来了解它们。
希望它有所帮助。如有任何疑虑,请随时告诉我。