使用 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包,供需要的人下载

    

      

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值