2011-04-03 55 views
2

我想在大小大于1MB时缩小图像大小(以KB为单位)。使用谷歌应用程序引擎图像无法缩小图像大小java API

当我应用具有较小宽度和较小高度的尺寸变换时,变换图像的尺寸(以字节为单位)大于原始图像。

有趣(或SAD)的部分是即使当我调用与相同的宽度和高度作为原稿(即尺寸不改变)的大小“转化的”调整大小图像比原稿大

final byte[] origData = .....; 
    final ImagesService imagesService = ImagesServiceFactory.getImagesService(); 

    final Image origImage = ImagesServiceFactory.makeImage(oldDate); 
    System.out.println("orig dimensions is " + origImage.getWidth() + " X " + origImage.getHeight()); 

    final Transform resize = ImagesServiceFactory.makeResize(origImage.getWidth(), origImage.getHeight()); 
    final Image newImage = imagesService.applyTransform(resize, origImage); 
    final byte[] newImageData = newImage.getImageData(); 
    //newImageData.length > origData.length :-(
+1

这可能没有帮助,但您是否尝试过appengine邮件列表?他们非常有帮助和/或搜索列表可能会出现答案。 – jbrookover 2011-04-03 22:51:21

+0

刚发布我的问题http://groups.google.com/group/google-appengine/browse_thread/thread/27d5d13bd7be3670# – 2011-04-04 12:02:53

回答

3

图像编码具有一些您观察结果的特殊特征。在从(文件)表示中解码图像时,会生成很多像素。随后的编码只能看到像素,并且不知道原始文件的大小。因此编码步骤是正确的。

普通的JPEG格式和PNG格式都有不同的压缩等级,即质量设置。他们可以有这个,因为他们做有损压缩。一般而言,具有许多细节(锐利边缘)的图像应该以低质量的高质量和模糊图像进行压缩;正如你可能已经看到的那样,小图像通常比较模糊,大图像通常更加锐利。

没有进入技术细节,这意味着你应该设置质量等级来符合你的图像的性质,这也取决于输入图像的大小。换句话说,如果你将一个模糊的图像编码为一个大文件,那么你就浪费了空间,因为你会用较少的字节获得相同的结果。 但编码器没有这个信息,所以你必须使用正确的质量设置来配置它

编辑:在你的情况下,手动设置低质量编码,如果你开始一个小文件(与像素),当然如果相反的话是高质量的。做一些实验,可能所有照片的单一质量设置都可以接受。

+0

谷歌应用程序引擎图像API支持此操作(压缩/编码)? – 2011-04-04 12:03:48

+1

根据发行说明,是:版本1.3.8 - 2010年10月14日,在图像API中添加了OutputSettings类,以指定在生产中运行时的JPEG编码质量。 – ThomasRS 2011-04-04 14:09:42

+0

是OutputSettings提出了:-)谢谢 – 2011-04-04 19:21:33

1

我陷入的陷阱是,我要求PNG输出...并且图像大小也没有改变。图像服务默默忽略了质量参数。根据实施中的评论,质量参数仅被考虑用于JPEG

相关问题