簡體   English   中英

如何在不使用磁盤存儲的情況下在python中加載圖像?

[英]How to load an image in python without using disk storage?

我正在編寫一個燒瓶應用程序,它接收兩個圖像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)

這就像一個魅力。

我想知道是否有一種方法可以在不使用服務器磁盤存儲的情況下加載映像。 從而減少了我的服務的硬盤空間需求。

如果您不想將圖像存儲在臨時文件中,則可以將URL內容包裝在流中並將其傳遞給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))

您可以將它們移動到已知的遠程位置,並根據需要將其移回。 使用Amazon S3或像BrickFTP這樣的托管FTP服務都很簡單。 S3特別便宜,因為你只需支付你使用的費用 - 沒有月租費。 如果您希望盡可能簡單地為其他應用程序和用戶訪問圖像,那么Brick是一項很棒的服務,但每月只需支付最低費用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM