使用google应用程序引擎图像java API减少图像大小失败
当图像大小大于1MB时,我想减小图像大小(KB) 当我以较小的宽度和高度应用调整大小转换时,转换图像的大小(以字节为单位)大于原始图像 有趣或悲伤的是,当我以与原始图像相同的宽度和高度调用“调整大小”时,也就是说,尺寸没有改变,变换后的图像的尺寸比原始图像大使用google应用程序引擎图像java API减少图像大小失败,java,image,google-app-engine,resize,Java,Image,Google App Engine,Resize,当图像大小大于1MB时,我想减小图像大小(KB) 当我以较小的宽度和高度应用调整大小转换时,转换图像的大小(以字节为单位)大于原始图像 有趣或悲伤的是,当我以与原始图像相同的宽度和高度调用“调整大小”时,也就是说,尺寸没有改变,变换后的图像的尺寸比原始图像大 final byte[] origData = .....; final ImagesService imagesService = ImagesServiceFactory.getImagesService();
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 :-(
图像编码有一些特殊的特性,您可以从中观察结果。当您从图像的文件表示形式解码图像时,会生成大量像素。后续编码只看到像素,不知道原始文件的大小。因此,编码步骤是正确的关键 通用格式和PNG格式具有不同的压缩级别,即质量设置。他们可以这样做,因为他们做有损压缩。一般来说,对于细节较多的图像,边缘锐利的图像应进行高质量压缩,而模糊的图像质量较低;正如您可能已经看到的,小图像通常更模糊,而大图像通常更清晰 在不涉及技术细节的情况下,这意味着您应该根据图像的性质设置质量级别,这也取决于输入图像的大小。换句话说,如果将模糊的图像编码为一个大文件,则是在浪费空间,因为使用更少的字节可以获得大致相同的结果。但是编码器没有此信息,因此您必须使用正确的质量设置对其进行配置
编辑:在您的情况下,如果开始时文件比像素数小,则手动设置低质量编码,如果相反,则设置高质量编码。做一些实验,可能所有照片的单一质量设置都是可以接受的。我遇到的一个陷阱是,我请求PNG输出。。。图像大小也没有改变。图像服务默认忽略了质量参数。根据实施中的注释,质量参数仅适用于JPEG。这可能没有帮助,但您是否尝试过appengine邮件列表?他们非常有帮助,搜索列表可能会找到答案。刚刚在google app engine Image API上发布了我的问题是否支持此操作压缩/编码?根据发行说明,是:版本1.3.8-2010年10月14日,在Images API中添加了OutputSettings类,以指定在生产环境中运行时的JPEG编码质量。