5

在谷歌应用引擎开发环境中,我无法获取 exif 数据。我按照这里的指南 https://developers.google.com/appengine/docs/python/images/imageclass

我已经在代码中完成了以下操作

def getResizedImage(self, image, imagemaxWidth, imagemaxHeight):
    img = images.Image(image_data=image)
    logging.error(img.get_original_metadata())

我只得到无。img 对象很好,因为我可以执行 img.resize 等。我需要获取 Exif 信息。

更新:通过这样做,我能够获得元数据,

def getResizedImage(self, image, imagemaxWidth, imagemaxHeight):
    img = images.Image(image_data=image)
    img.rotate(0)
    img.execute_transforms()
    logging.error(img.get_original_metadata())

就像文档中解释的那样,我得到了非常“有限”的设置

{u'ImageLength': 480, u'ImageWidth': 640}

显然你在真实环境中得到了更大的设置,但我不知道为什么这不能成为 dev env 的特性。这很令人沮丧。只要我能获得 pyexiv2 级别的 exif 我就可以,但如果它只是使用 PIL 就不够好。目前 PIL 提供的 exif 信息很少。

4

2 回答 2

3

开发环境使用 PIL 来解释你所看到的。生产环境不使用 PIL,并且会为您提供映像中的大部分标签。

于 2012-06-27T10:10:10.553 回答
0

取自文档get_original_metadata

回报:
  带有字符串键的dict。如果用 parse_metadata 调用了 execute_transform
  为真,这本词典包含有关各种属性的信息
  原始图像,例如尺寸、颜色配置文件和属性
  来自 EXIF。
  即使 parse_metadata 为 False 或图像没有任何元数据,
  字典将包含一组有限的元数据,至少
  'ImageWidth' 和 'ImageLength', 对应的尺寸
  原始图像。
  如果在成功之前调用它,它将返回 None
  执行转换。

You want to pass parse_metadata=True to execute_transform in order to get more metadata including the exif data.

Also The bottom note about it returning None explains why you had to call execute_transforms in order to get anything back

于 2013-02-26T12:32:23.130 回答