Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python Base64压缩GAE Blob图像?_Python_Image_Google App Engine_Base64_Blob - Fatal编程技术网

使用Python Base64压缩GAE Blob图像?

使用Python Base64压缩GAE Blob图像?,python,image,google-app-engine,base64,blob,Python,Image,Google App Engine,Base64,Blob,我正在将20个随机缩略图的JSON请求拉到一个iPhone应用程序中。目前,我只是简单地将图像拇指URL包含在JSON数组中(见下文),然后iPhone就可以获取每个图像。这真的很慢 原始JSON请求: { "item_list": [ { "item_name": "Item One", "user_item_thumb": "http://localhost:8080/i/agpwaGluZ28tYXBwcg4LEghJdGVtVXNlchgPDA/67

我正在将20个随机缩略图的JSON请求拉到一个iPhone应用程序中。目前,我只是简单地将图像拇指URL包含在JSON数组中(见下文),然后iPhone就可以获取每个图像。这真的很慢

原始JSON请求:

{ "item_list": [ { "item_name": "Item One", "user_item_thumb": "http://localhost:8080/i/agpwaGluZ28tYXBwcg4LEghJdGVtVXNlchgPDA/67x67", }, { "item_name": "Item Two", "user_item_thumb": "http://localhost:8080/i/agpwaGluZ28tYXBwcg4LEghJdGVtVXNlchgQDA/67x67", }, { "item_name": "Item Three", "user_item_thumb": "http://localhost:8080/i/agpwaGluZ28tYXBwcg4LEghJdGVtVXNlchgRDA/67x67", } ] } { “项目清单”:[ { “项目名称”:“项目一”, “用户项目”:http://localhost:8080/i/agpwaGluZ28tYXBwcg4LEghJdGVtVXNlchgPDA/67x67", }, { “项目名称”:“项目二”, “用户项目”:http://localhost:8080/i/agpwaGluZ28tYXBwcg4LEghJdGVtVXNlchgQDA/67x67", }, { “项目名称”:“项目三”, “用户项目”:http://localhost:8080/i/agpwaGluZ28tYXBwcg4LEghJdGVtVXNlchgRDA/67x67", } ] } 所以,我的想法是在图像数据上使用Base64,并将它们包含在JSON请求中,因此iPhone只需要一个请求,而不是21个请求。有道理吗

那么,我该怎么做呢?
我试图简单地将下面的内容打印成JSON,但这些都是完整大小的图像,我需要推送Base64版本的缩略图

不工作:

f=项目。图像
f_enc=f.encode('base64')

这就是我现在如何得到我的拇指,只是在飞行中创造它们

这就是渲染上述图像请求的原因:

class Image(webapp.RequestHandler): def get(self, image_id): user = db.get(image_id) if user.image: picture = user.image self.response.headers['Content-Type'] = "image/png" self.response.out.write(picture) else: self.response.out.write("No image") 类映像(webapp.RequestHandler): def get(自身、图像\u id): user=db.get(image\u id) 如果user.image: picture=user.image self.response.headers['Content-Type']=“image/png” 自我。回应。输出。写入(图片) 其他: self.response.out.write(“无图像”) 任何想法都会令人惊讶。
如果有更好的办法,我洗耳恭听

我的问题:
-iPhone在这20张图片中的每一张都很慢
-图像是随机的,因此缓存可能不是一个选项。
-Base64是正确的选择吗

谢谢,

Danny

也许您只需要调用
read()


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

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


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

您是将图像存储在blobstore还是数据存储中?如果在数据存储中,如何动态创建缩略图?使用图像API?尼克,没错。我将图像保存为BlobProperty,然后使用图像类(我刚刚添加到上面的问题中)调用它们。也许我解决这个问题的整个方法都是错误的,只是看起来有点慢。谢谢Bradley,但这只是呈现全尺寸的图像,我感兴趣的是添加到JSON响应中的缩略图。如上所述。。。也许我只是需要创建每个图像的缩略图?谢谢Nick,我会尝试一下,看看我是怎么做的。我认为在保存原始图像的同时创建缩略图可能会更好,速度更快。无论如何,我会试试看,谢谢!
encoded = item.image.read().encode('base64')