小编典典

将jpg,gif,png等存储在gae-datastore中

python

我找到了一个有关如何在数据存储区中存储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等)?


阅读 226

收藏
2020-12-20

共1个答案

小编典典

快速答案

您可以db.BlobProperty()在模型中使用来存储任何文件类型的二进制数据。

如果您使用的ImageAPI来处理图像数据,你只限于输入
.jpg.png.gif.bmp.tiff,和.ico类型,并输出到任何.jpg.png


储存影像

要将图像简单地存储在数据存储中,请db.BlobProperty()在您的模型中使用,然后将其存储为图片的二进制数据。这就是数据存储在链接到的示例代码中的方式(请参见第85行)。

因为类型db.BlobProperty类型本身不是图片,而是可以存储任何二进制数据,所以需要一些规则。没有简单的方法以编程方式强制执行仅图片约束。幸运的是,这意味着您可以存储任何你想要的类型,包括数据.jpg.gif.tiff等除了文件.png格式,如示例。

您可能希望像示例中那样,为Model创建一个新的Class,并除了图像的二进制数据之外,还存储文件所需的某些元数据(“名称”,“文件类型”等)。
。您可以在链接到的示例中的第65行看到一个示例。

要将图片存储在中BlobProperty,您需要使用db.put()来保存数据;这与任何类型的相同。请参阅链接到的示例代码中从第215行开始的代码。


处理图像

如果必须处理图像,则可以使用Images
API
程序包。从Images
API概述中,
我们可以看到以下内容:

该服务接受JPEG,PNG,GIF(包括动画GIF),BMP,TIFF和ICO格式的图像数据。

它可以返回JPEG和PNG格式的转换图像。如果输入格式和输出格式不同,则服务将在执行转换之前将输入数据转换为输出格式。

因此,即使您可以从技术上将任何类型存储在数据存储区中,但是如果您使用此API来操作图像,则有效的输入和输出键入器都会受到限制。

2020-12-20