【发布时间】:2012-12-05 16:49:27
【问题描述】:
我们有一个应用,它从 blobstore 提供一系列图像。一个 例子在这里:
这是一个巨大的 png,因此下载为 536K。
如果我们将其大小调整为 400,它仍然很大 (263k):
我们怎样才能请求或存储某种更好的图片 压缩?我们的应用程序有一个移动客户端,正在等待 273K 实在是太慢了。
【问题讨论】:
标签: java google-app-engine blobstore
我们有一个应用,它从 blobstore 提供一系列图像。一个 例子在这里:
这是一个巨大的 png,因此下载为 536K。
如果我们将其大小调整为 400,它仍然很大 (263k):
我们怎样才能请求或存储某种更好的图片 压缩?我们的应用程序有一个移动客户端,正在等待 273K 实在是太慢了。
【问题讨论】:
标签: java google-app-engine blobstore
有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);
【讨论】:
您可以启用Pagespeed service 即时重新压缩图像。
【讨论】:
您可以使用PIL 从您的前端实例动态提供重新压缩的图像。
【讨论】:
您可以将图像的不同版本(具有不同的压缩比)上传到blobstore 或cloud storage,然后选择要在客户端显示的版本(使用 CSS 或客户端逻辑)。
【讨论】: