簡體   English   中英

使用Python Base64壓縮GAE Blob圖像?

[英]Compress GAE Blob images using Python Base64?

我將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", 
    }
  ]
}

因此,我當時想在圖像數據上使用Base64,實際上將它們包括在JSON請求中,因此iPhone僅需要一個請求,而不是21個請求。 說得通?

那么,我該怎么做呢?
我嘗試將以下內容簡單地打印為JSON,但是這些是全尺寸圖片,我需要推送Base64版本的Thumbnails。

無法運作:

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

這就是我現在獲得拇指的方式,只是即時創建它們。

HTTP://本地主機:8080 / I / agpwaGluZ28tYXBwcg4LEghJdGVtVXNlchgSDA / 67x67

這就是呈現上述圖像請求的原因:

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")

任何想法都將是驚人的。
如果有更好的方法可以做到這一點,我全神貫注。

我的問題:
-iPhone緩慢拉入這20張圖像中的每張
-圖片是隨機的,因此緩存可能不是一種選擇。
-要走Base64嗎?

謝謝,
丹尼

是的,鑒於它們只是縮略圖,因此直接使用base64直接編碼圖像似乎是一種合理的方法。 這與使用data:網頁中的URL出於相同的原因類似。

這樣做應該像調用常規代碼中執行的相同Images API轉換一樣簡單,以生成縮略圖,然后將結果輸出序列化為base64。 您可能希望在兩個處理程序中將結果緩存在memcache中,以防止對Images API的多余調用。 或者,您可以在首次上傳圖像時計算縮略圖,並將其存儲在全尺寸圖像旁邊。

也許您只需要調用read()

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

如果要處理任何大尺寸的圖像,則需要按塊進行編碼(即多次read(4096) ,對每塊進行編碼)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM