是否有可能從Python腳本使用谷歌應用程序引擎python圖像庫從本地文件系統加載圖像文件?還是必須從數據存儲加載圖像?我可以成功加載文本文件並顯示其內容。從文件系統谷歌應用程序引擎加載圖像
我正在使用谷歌應用程序引擎與Python 2.7和使用PIL圖像庫。我在Mac OS X 10.8.2上使用PyCharm和Google App Engine Launcher。我使用從源代碼構建的PIL版本1.1.7。
我想在圖像(或圖像)上執行一些操作,然後將它們返回到我的python腳本的響應輸出中。
當我使用Image.image(filename=<filename>)
函數時,我得到的錯誤告訴我文件名必須以「/ gs」開頭。步入Image對象的__init()__
方法向我顯示,如果我向Image構造函數提供文件名,則使用blobstore.create_gs_key()
創建blobkey。
因爲我有一組固定的圖像,我希望能夠避免必須手動將它們上傳到數據存儲中進行檢索。
我的微不足道的應用程序處理程序目前看起來像這樣;
class ChallengeImageHandler(webapp2.RequestHandler):
def get(self):
olifant = images.Image(filename='gs/challenge/C017.png')
logging.debug("olifant.width=%d" % olifant.width);
logging.debug("olifant.height=%d" % olifant.height);
self.response.headers[ 'Content-Type' ] = 'image/png'
self.response.out.write(olifant)
return
我的app.yaml看起來像這樣;
application: hello_world
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /stylesheets
static_dir: stylesheets
- url: /images
static_dir: images
- url: /.*
script: main.application
- url: /software_development.html
script: main.application
libraries:
- name: jinja2
version: latest
- name: PIL
version: latest
我明白,我可以靜態地服務於圖像達到同樣的效果,但一旦我已經設法成功加載圖像,我希望爲它服務之前對其進行操作。我故意將我希望從我的應用程序加載的圖像放置在不同於/images
的目錄中,而不是由Google應用程序引擎Web服務器將其作爲靜態內容。它們位於名爲gs/challenge
的子目錄中。
任何援助,建議或解決方案非常感謝。也許我正在以完全錯誤的方式解決這個問題?
我不同意。您可以將圖像放入Blobstore中,並使用帶有get_serving_url的Google高性能圖像服務。這不是非常快,但你也不必自己提供圖像,而且幾乎是免費的。這是一個get_serving_url的例子:https://lh6.ggpht.com/1HjICy6ju1e2GIg83L0qdliUBmPHUgKV8FP3QGK8Qf2pHVBfwkpO_V38ifAPm-9m20q_3ueZzdRCYQNyDE3pmA695iaLunjE=s0 – voscausa
我並不反對這一切,但提問者似乎想避免,由於某種原因,把這個內容在任何類型的blobstore。我個人會按你的建議去做。 –
PaulC,感謝您的回覆。我已經能夠加載一個文本文件並顯示它的內容。所以我明白可以在app引擎項目中打開/加載文件。我在做什麼特別麻煩,是從本地文件系統加載圖像。我準備使用blobstore,只是想知道如果沒有額外的步驟是否可能。 – DavrosYoung