鉴于GAE的后续模型:
avatar = db.BlobProperty()
通过以下方式调用图像实例属性高度或宽度(see documentation)
height = profile.avatar.height
抛出以下错误:
AttributeError:'Blob'对象没有属性'height'
已安装PIL。
答案 0 :(得分:13)
如果图像存储在BlobProperty中,则数据存储在数据存储区中,如果profile
是您的实体,则可以按以下方式访问高度:
from google.appengine.api import images
height = images.Image(image_data=profile.avatar).height
如果图像位于blobstore中(数据存储区中的blobstore.BlobReferenceProperty),那么你有两种方法可以做到这一点,更好的方法是复杂的,需要获取一个读取器的blob并将其提供给exif阅读器得到大小。一种更简单的方法是:
如果avatar = db.BlobReferenceProperty()
和profile
是您的实体,那么:
from google.appengine.api import images
img = images.Image(blob_key=str(profile.avatar.key()))
# we must execute a transform to access the width/height
img.im_feeling_lucky() # do a transform, otherwise GAE complains.
# set quality to 1 so the result will fit in 1MB if the image is huge
img.execute_transforms(output_encoding=images.JPEG,quality=1)
# now you can access img.height and img.width
答案 1 :(得分:5)
blob不是图像,而是一块数据。
要从blob中生成Image
,如果blob存储在blobstore中,则必须调用Image(blob_key=your_blob_key)
;如果将blob存储为blob,则必须调用Image(image_data=your_image_data)
数据存储。