3

我们有一个应用程序从 blobstore 提供一系列图像。这里有一个例子:

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

这是一个巨大的 png,因此下载为 536K。

如果我们将它的大小调整为 400,它仍然很大(263k):

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

我们如何以某种更好的压缩方式请求或存储图片?我们的应用程序有一个移动客户端,等待 273K 的速度真的很慢。

4

4 回答 4

10

图像 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);
于 2012-12-05T20:33:20.897 回答
0

您可以使用PIL从前端实例动态提供重新压缩的图像。

于 2012-12-05T17:08:57.873 回答
0

您可以将图像的不同版本(具有不同压缩比)上传到blobstore云存储,并选择要在客户端显示的版本(使用 CSS 或客户端逻辑)。

于 2012-12-05T17:09:55.003 回答
0

您可以启用Pagespeed 服务以即时重新压缩图像。

于 2012-12-05T16:52:46.987 回答