1

是否可以使用来自 python 脚本的 google app engine 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”开头。__init()__如果我向 Image 构造函数提供文件名,则进入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. 它们位于名为 的子目录中gs/challenge

非常感谢任何帮助、建议或解决方案。也许我正在以完全错误的方式解决这个问题?

4

2 回答 2

0

如果您想从本地文件系统加载文件,只需将它们与您的应用程序一起上传即可。

只要您意识到它们永远不会更改,并且除了部署应用程序时您无法更改它们,并且部署的应用程序可以占用的空间量有限制,您应该没问题。

例如,我将一个 .csv 文件与我的应用程序一起上传,当它第一次启动时,它会读取它并在数据存储中创建与其内容相关的记录。然后我再也不使用那个文件了。

您放置图像的位置并不真正相关,因为您在将它们提供给用户之前对其进行操作,因此它们不是“静态内容”,并且不会直接提供给用户(因为 .css 文件将用于例子)。只要您的应用程序可以加载它们,那就是正确的地方。

于 2012-12-05T09:24:33.057 回答
0

您部分错误/正确,我终于能够以这种方式使用 PIL 从内存中打开文件,一些导入可能是不必要的,但 w/e:

from PIL import Image, ImageDraw, ImageFont
from io import BytesIO

rawdata = open(fullpathtoimagefile).read()
stream = BytesIO(rawdata)
im = Image.open(stream)
于 2015-07-07T02:52:43.057 回答