我正在编写一个烧瓶应用程序,它接收两个图像URL作为参数。传统上,我会将这些图像下载到服务器本地磁盘上并执行我的图像处理操作。我正在使用以下代码下载它们。
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)
就像魅力一样。
我想知道是否有办法在不使用服务器磁盘存储的情况下加载图像。从而减少了我的服务的硬盘空间需求。
答案 0 :(得分:2)
如果您不想将图片存储在临时文件中,可以在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))
答案 1 :(得分:0)
您可以将它们移动到已知的远程位置,并根据需要将其移回。使用Amazon S3或像BrickFTP这样的托管FTP服务都很简单。 S3特别便宜,因为你只需支付你使用的费用 - 没有月租费。如果您希望尽可能简单地为其他应用程序和用户访问图像,那么Brick是一项很棒的服务,但每月只需支付最低费用。