【问题标题】:Compress GAE Blob images using Python Base64?使用 Python Base64 压缩 GAE Blob 图像?
【发布时间】:2011-07-28 22:49:37
【问题描述】:

我将 20 个随机缩略图的 JSON 请求拉到 iPhone 应用程序。目前,我只是将图像缩略图 URL 包含在 JSON 数组中(见下文),然后 iPhone 会出去获取每个图像。这真的很慢。

原始 JSON 请求:

{ “项目列表”:[ { "item_name": "项目一", "user_item_thumb": "http://localhost:8080/i/agpwaGluZ28tYXBwcg4LEghJdGVtVXNlchgPDA/67x67", }, { "item_name": "项目二", "user_item_thumb": "http://localhost:8080/i/agpwaGluZ28tYXBwcg4LEghJdGVtVXNlchgQDA/67x67", }, { "item_name": "第三项", "user_item_thumb": "http://localhost:8080/i/agpwaGluZ28tYXBwcg4LEghJdGVtVXNlchgRDA/67x67", } ] }

所以,我的想法是在图像数据上使用 Base64 并将它们实际包含在 JSON 请求中,因此 iPhone 只需要一个请求而不是 21 个请求。有道理?

那么,我该怎么做呢?
我尝试将以下内容简单地打印为 JSON,但这些是全尺寸图像,我需要推送 Base64 版本的缩略图。

不工作:

f = item.image
f_enc = f.encode('base64')

这就是我目前获得拇指的方式,只是动态地创建它们。

http://localhost:8080/i/agpwaGluZ28tYXBwcg4LEghJdGVtVXNlchgSDA/67x67

这是呈现上述图像请求的原因:

类图像(webapp.RequestHandler): 定义获取(自我,image_id): 用户 = db.get(image_id) 如果用户.图像: 图片 = user.image self.response.headers['Content-Type'] = "image/png" self.response.out.write(图片) 别的: self.response.out.write("没有图片")

任何想法都会很棒。
如果有更好的方法来做到这一点,我会全力以赴。

我的问题:
- iPhone 在这 20 张图片中的每一张都拉得很慢
- 图片是随机的,所以缓存可能不是一种选择。
- Base64 是要走的路吗?

谢谢,
丹尼

【问题讨论】:

  • 您是将图像存储在 blobstore 中还是数据存储区中?如果在数据存储中,您如何动态创建缩略图?使用图像 API?
  • 尼克,没错。我将图像保存为 BlobProperty,然后使用 Image 类(我刚刚添加到上述问题中)调用它们。也许我的整个解决方法都是错误的,这一切似乎有点慢。

标签: python image google-app-engine base64 blob


【解决方案1】:

是的,直接使用 base64 编码图像似乎是一种合理的方法,因为它们只是缩略图。这与在网页中使用data: URL 类似,原因相同。

这样做应该很简单,只需调用您在常规代码中执行的相同图像 API 转换以生成缩略图,然后将结果输出序列化为 base64。您可能希望将结果缓存在 memcache 中 - 在两个处理程序中 - 以防止对图像 API 的冗余调用。或者,您可以在首次上传图片时计算缩略图,并将其与全尺寸图片一起存储。

【讨论】:

  • 谢谢尼克,我会试一试,看看我会怎么做。我认为在保存原始图像的同时创建缩略图可能会更好,速度明智。无论如何,我会给它一个裂缝,谢谢!
【解决方案2】:

也许你只需要打电话给read()

encoded = item.image.read().encode('base64')

如果您要处理任何大尺寸的图像,您需要以块的形式进行编码(即read(4096) 多次,对每一块进行编码)。

【讨论】:

  • 感谢 Bradley,但这只是呈现全尺寸图像,这是我有兴趣添加到 JSON 响应中的缩略图。如上所述...也许我只需要创建每个图像的缩略图?
猜你喜欢
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
相关资源
最近更新 更多