我正在编写一个接收两个图像 URL 作为参数的 Flask 应用程序。传统上,我会在服务器本地磁盘上下载这些图像并执行我的图像处理操作。我正在使用以下代码下载它们。
urllib.request.urlretrieve(image1url, image_id + '.jpg')
在此之后,我使用 :
读取图像original_image = Image.open(image_id + '.jpg')
并执行我的图像处理操作,例如裁剪和应用一些滤镜。
original_crop = original_image.crop((x, y, x + width / 3, y + height / 3))
此外,我对这张图片使用了 ImageFilter 操作。现在这段代码将部署在服务器上。如果我继续这种方式,我将继续下载图像并将其保存在服务器的磁盘上。当然,我知道在完成图像处理操作后删除图像是一种选择。但是如果我每秒接到几百个调用,我可能会在某个时间点用完很多空间。该应用程序是多线程的,使用调用
app.run(threaded=true)
这就像一个魅力。
我想知道是否有一种方法可以在不使用服务器磁盘存储的情况下加载图像。从而减少了我的服务对硬盘空间的需求。
最佳答案
如果您不想将图像存储在临时文件中,您可以将 URL 内容包装在 stream 中并将其传递给 Image.open
import io
import urllib.request
from PIL import Image
# your avatar URL as example
url = ('https://www.gravatar.com/avatar/3341748e9b07c9854d50799e0e247fa3'
'?s=328&d=identicon&response=PG&f=1')
content = urllib.request.urlopen(url).read()
original_image = Image.open(io.BytesIO(content))
关于python - 如何在不使用磁盘存储的情况下在 python 中加载图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44193511/