我的代码有点困惑:
def setVenueImage(img):
img = images.Image(img.read())
x, y = photo_utils.getIdealResolution(img.width, img.height)
img.resize(x, y)
img.execute_transforms()
venue_obj = getVenueSingletonObject()
if venue_obj is None:
venue_obj = Venue(images = [img])
else:
venue_obj.images.append(img)
db.put(venue_obj)
我正在使用django和app引擎 - 所以img.read()工作正常。
事实上,在我尝试将img存储到数据库之前,所有这些代码都可以正常工作。我的模型需要一个Blob,所以当我将图像作为img放入时,它会抛出一个拟合,然后我得到:
/ admin / venue /的BadValueError 图像列表中的项目必须都是Blob实例
好的,所以Image不能是Blob,但是如何让它成为blob? Blob接受一个字节字符串,但是如何使我的图像成为字节串?
我没有在文档中看到他们实际使用图像对象的任何地方,所以我不确定这一切是如何工作的,但我确实想要使用图像对象来调整大小我的形象(我知道你可以在PIL中完成它,但我想知道如何使用谷歌的Image类)。
感谢您的任何指示:)
答案 0 :(得分:2)
我对这个解决方案不满意,因为它没有将Image对象转换为blob,但它暂时会这样做:
def setVenueImage(img):
original = img.read()
img = images.Image(original)
x, y = photo_utils.getIdealResolution(img.width, img.height)
img = images.resize(original, x, y)
venue_obj = getVenueSingletonObject()
if venue_obj is None:
venue_obj = Venue(images = [db.Blob(img)])
else:
venue_obj.images.append(db.Blob(img))
db.put(venue_obj)
答案 1 :(得分:2)
这可能会奏效:
def setVenueImage(img):
img = images.Image(img.read())
x, y = photo_utils.getIdealResolution(img.width, img.height)
img.resize(x, y)
img_bytes = img.execute_transforms() # Converts to PNG
venue_obj = getVenueSingletonObject()
if venue_obj is None:
venue_obj = Venue(images = [img_bytes])
else:
venue_obj.images.append(img_bytes)
db.put(venue_obj)
我假设Venue.images是一个ListProperty(db.Blob),对吗?这可能是错误的做法。使用简单的blob属性定义VenueImage模型并将其密钥存储到Venue中。如果您直接将图像放在那里,您将在数据存储上达到1MB的行限制。
答案 2 :(得分:0)
http://code.google.com/appengine/docs/python/images/usingimages.html
我认为该链接应该有所帮助。祝你好运。