我找到了一个有关如何在数据存储区中存储png的示例:
img = images.Image(img_data) # Basically, we just want to make sure it's a PNG # since we don't have a good way to determine image type # through the API, but the API throws an exception # if you don't do any transforms, so go ahead and use im_feeling_lucky. img.im_feeling_lucky() png_data = img.execute_transforms(images.PNG) img.resize(60, 100) thumbnail_data = img.execute_transforms(images.PNG) Picture(data=png_data, thumbnail_data=thumbnail_data).put()
这段代码对我来说很混乱,但是它适用于png。但是,我应该怎么做才能存储所有最常见的格式(jpg,gif,tiff等)?
您可以db.BlobProperty()在模型中使用来存储任何文件类型的二进制数据。
db.BlobProperty()
如果您使用的ImageAPI来处理图像数据,你只限于输入 .jpg,.png,.gif,.bmp,.tiff,和.ico类型,并输出到任何.jpg或.png。
Image
.jpg
.png
.gif
.bmp
.tiff
.ico
要将图像简单地存储在数据存储中,请db.BlobProperty()在您的模型中使用,然后将其存储为图片的二进制数据。这就是数据存储在链接到的示例代码中的方式(请参见第85行)。
因为类型db.BlobProperty类型本身不是图片,而是可以存储任何二进制数据,所以需要一些规则。没有简单的方法以编程方式强制执行仅图片约束。幸运的是,这意味着您可以存储任何你想要的类型,包括数据.jpg,.gif,.tiff等除了文件.png格式,如示例。
db.BlobProperty
您可能希望像示例中那样,为Model创建一个新的Class,并除了图像的二进制数据之外,还存储文件所需的某些元数据(“名称”,“文件类型”等)。 。您可以在链接到的示例中的第65行看到一个示例。
要将图片存储在中BlobProperty,您需要使用db.put()来保存数据;这与任何类型的相同。请参阅链接到的示例代码中从第215行开始的代码。
BlobProperty
db.put()
如果必须处理图像,则可以使用Images API程序包。从Images API概述中,我们可以看到以下内容:
该服务接受JPEG,PNG,GIF(包括动画GIF),BMP,TIFF和ICO格式的图像数据。 它可以返回JPEG和PNG格式的转换图像。如果输入格式和输出格式不同,则服务将在执行转换之前将输入数据转换为输出格式。
该服务接受JPEG,PNG,GIF(包括动画GIF),BMP,TIFF和ICO格式的图像数据。
它可以返回JPEG和PNG格式的转换图像。如果输入格式和输出格式不同,则服务将在执行转换之前将输入数据转换为输出格式。
因此,即使您可以从技术上将任何类型存储在数据存储区中,但是如果您使用此API来操作图像,则有效的输入和输出键入器都会受到限制。