使用 Thumbnails 压缩图片

阅读更多

     PC上线的商城,最近推出了手机版(App & 微信公众号)

      商品图片之前适配的PC版,尺寸较大,在手机端直接浏览会比较占用比较高的带宽导致速度变慢,本想让美工重新上传手机适配版的,商品繁多,重复工作;所以就查了一下图片压缩的资料;然后看到了Google开源 项目Thumbnails;用了一下发现效果挺不错;代码比价简单

Thumbnails.of("源文件路径") 
			        .scale(1f) //0-1 float 压缩大小
			        .outputQuality(0.7f) //0-1 压缩质量
			        .toFile("新文件路径");

    当然还有其他支持的方法:旋转、裁剪、格式转换、加水印等;可自行查阅相关资料

   

      这样运行了一段时间,突然在手机端发现有些图片底色变色非常严重,开始怀疑是设置质量outputQuality的问题,但是测试发现设置为1问题依然存在,然后怀疑是否是jpg的问题呢,用Thumbnails方法将jpg转成png,然后再压缩,问题还是存在;最后用画图工具将jpg转成png,再将png压缩发现图片色彩没有丢失的情况;但是问题又来了,发现png压缩无论怎么设置outputQuality压缩后的文件大小并没有非常明显的改善;而且要手工将jpg转png(上万张图片 内心是拒绝的)

  带着疑问查了下相关资料,这一块资料比较少,这也是我将此记录下来分享的原因;发现一些代码中用到了阿里的ImageReadHelper类,抱着试试的态度尝试了下,使用ImageReadHelper的方法作为Thumbnails输入流,问题终于解决了

				        File in = new File(filePath); // 原图片
				        FileInputStream inStream = new FileInputStream(in);
                                        String scaleReq   = request.getParameter("scale");
					String qualityReq = request.getParameter("quality");
					float scale   = 1;
					float quality = 0.5F;
					if(scaleReq != null && !"".equals(scaleReq)){
						scale = Float.parseFloat(scaleReq);
					}
					if(qualityReq != null && !"".equals(qualityReq)){
						quality = Float.parseFloat(qualityReq);
					}
					
					imageWrapper = ImageReadHelper.read(inStream);
					Thumbnails.of(imageWrapper.getAsBufferedImage())
						.scale(scale) 
						.outputQuality(quality) 
						.toFile(thumPath);

 附件为Thumbnails、simpleimage及所需Jar包,供需要的人下载

    

      

  • thumbnailator-0.4.8.zip (7.3 MB)
  • 下载次数: 0
  • jai_codec-1.1.3.jar.zip (240.7 KB)
  • 下载次数: 0

你可能感兴趣的:(使用 Thumbnails 压缩图片)