2011-09-23 64 views
2

我必須管理從客戶端拍攝的一些圖像。GoogleAppEngine:如何防止圖像調整大圖像失敗

到現在爲止,我的代碼如下:

Image oldImage = null; 
    try { 
     oldImage = ImagesServiceFactory.makeImage(imageBuf); 
    } catch (Exception e) { 
     log.severe("Cannot make the image due to " + e); 
     return; 
    } 
    int newWidth = ??; //how can I guess this value to reach a size < 1MB?? 
    int newHeight= ??; //how can I guess this value to reach a size < 1MB?? 
    Transform resize = ImagesServiceFactory.makeResize(newWidth, newHeight); 
    Image newImage = imagesService.applyTransform(resize, oldImage); //Exception if > 1MB 

這種圖像可以超過GAE(1 MB)的大小限制,我想調整或爲了達到這些作物大小不到1 MB(比如950kB)。

我該如何實現這個目標?

我不能直接使用resize方法,因爲我不知道圖像應該調整大小的確切寬度&。此外,取決於圖片的編碼(png,jpeg等),圖像的大小也可以使用固定的高度和寬度而變化。

對於如何解決這個問題,我確實沒有有效的想法:我能看到一個解決方案的唯一方法是繼續嘗試更低和更低的維度,直到我獲得一個大小適中的圖像,但這顯然是不可接受的表演條款...

請幫幫我!

非常感謝您

再見

cghersi

+0

爲什麼你需要讓圖像成爲特定的文件大小?如果僅僅是由於API調用限制,你可以使用Blobstore,正如bdonlan指出的那樣。 –

回答

2

如果存儲圖像的blobstore,你可以resize much larger images比你可以使圖像通過您的應用程序服務器,通過使用getServingUrl()功能。由於這不會通過API傳遞數據,因此不受API響應大小限制的限制。