是否有可能从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