2012-12-05 62 views
3

我們有一個應用程序,用於從blobstore處服務器中的一系列圖像。一個 例子是在這裏:如何使用Google App Engine壓縮圖像Blobstore

http://lh4.ggpht.com/f76xUkRZLRkb_Qz5uu82TX3LoBRh4eYb9hxYwMRMLCk5ghO_OL0DW2v4rRnkewUyDWfBuBttgbUvuJJXwtFQosEB=s0

這是一個巨大的PNG,所以這個下載的536K。

如果我們把它調整到400跨越,它仍然是巨大的(263K):

http://lh4.ggpht.com/f76xUkRZLRkb_Qz5uu82TX3LoBRh4eYb9hxYwMRMLCk5ghO_OL0DW2v4rRnkewUyDWfBuBttgbUvuJJXwtFQosEB=s400

我們怎樣才能申請或圖片存儲在某種更好 壓縮?我們有一個移動客戶端用於我們的應用程序,並等待通過 273K使它真的很慢。

回答

0

您可以使用PIL從您的前端實例動態地提供重新壓縮的圖像。

0

可以上傳圖像的型動物版本(具有不同的壓縮比)到blobstorecloud storage和(使用CSS或客戶端邏輯)選擇的版本顯示客戶端。

10

Images API。壓縮和調整圖像大小:

// get image from blobstore 
ImagesService imagesService = ImagesServiceFactory.getImagesService(); 
Image oldImage = ImagesServiceFactory.makeImageFromBlob(blobKey); 

// compress & resize it 
OutputSettings settings = new OutputSettings(ImagesService.OutputEncoding.JPEG); 
settings.setQuality(90); 
Transform transform = ImagesServiceFactory.makeResize(newWidth, newHeight) 
Image newImage = imagesService.applyTransform(transform, oldImage, settings); 
byte[] blobData = newImage.getImageData(); 

//save data to blobstore 
FileService fileService = FileServiceFactory.getFileService(); 
AppEngineFile file = fileService.createNewBlobFile("image/jpeg", someFilename); 
FileWriteChannel writeChannel = fileService.openWriteChannel(file, true); 
writeChannel.write(ByteBuffer.wrap(blobData)); 
writeChannel.closeFinally(); 

// get the blobKey to newly written data 
BlobKey blobKey = fileService.getBlobKey(file); 
+0

我可以知道我是如何在python中做同樣的事嗎? –

+0

@AvinashRaj:還有Python的Images API:https://cloud.google.com/appengine/docs/python/images/ –

相關問題