如何使用Google App Engine Blobstore压缩图像 [英] How to compress images with Google App Engine Blobstore

查看:162
本文介绍了如何使用Google App Engine Blobstore压缩图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们有一个应用程序,用于从blobstore服务一系列图像。一个
的例子就在这里:



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

这是一个庞大的png,所以这个下载量为536K。



如果我们把它调整到400,它仍然很大(263k): b
$ b

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



我们如何可以请求或存储图片的某种更好的
压缩?我们有一个移动客户端用于我们的应用程序,并且通过
等待273K使它真的很慢。

图片API 。压缩和调整图像大小:

  //从blobstore获取图像
ImagesService imagesService = ImagesServiceFactory.getImagesService();
Image oldImage = ImagesServiceFactory.makeImageFromBlob(blobKey);

// compress&调整大小
OutputSettings settings = new OutputSettings(ImagesService.OutputEncoding.JPEG);
settings.setQuality(90);
Transform transform = ImagesServiceFactory.makeResize(newWidth,newHeight)
图片newImage = imagesService.applyTransform(transform,oldImage,settings);
byte [] blobData = newImage.getImageData();

//将数据保存到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();

//将blobKey写入新写入的数据
BlobKey blobKey = fileService.getBlobKey(file);


We have an app that servers a series of images from blobstore. An example is here:

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

It was a huge png, so this downloads at 536K.

If we resize it to 400 across, it's still huge (263k):

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

How can we request or store the picture in some kind of better compression? We have a mobile client for our app, and waiting through 273K is making it really slow.

解决方案

There is Images API. To compress and resize image:

// 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);

这篇关于如何使用Google App Engine Blobstore压缩图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆