求助java压缩图片存储大小的方法
需要在代码里处理上传图片的存储大小(不是图片尺寸,图片尺寸已处理),如1M压缩到500KB,求高人指点方法就常规的几种图片格式吧jpg/jpeg,bmp,gif,png...
需要在代码里处理上传图片的存储大小(不是图片尺寸,图片尺寸已处理),如1M压缩到500KB,求高人指点方法
就常规的几种图片格式吧jpg/jpeg,bmp,gif,png 展开
就常规的几种图片格式吧jpg/jpeg,bmp,gif,png 展开
2个回答
展开全部
可以使用Draw这个类,通过改变像素来改变存储大小,实例如下:
public static boolean compressPic(String srcFilePath, String descFilePath) throws IOException {
File file = null;
BufferedImage src = null;
FileOutputStream out = null;
ImageWriter imgWrier;
ImageWriteParam imgWriteParams;
// 指定写图片的方式为 jpg
imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();
imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(
null);
// 要使用压缩,必须指定压缩方式为MODE_EXPLICIT
imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);
// 这里指定压缩的程度,参数qality是取值0~1范围内,
imgWriteParams.setCompressionQuality((float) 1);
imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
ColorModel colorModel =ImageIO.read(new File(srcFilePath)).getColorModel();// ColorModel.getRGBdefault();
// 指定压缩时使用的色彩模式
// imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
// colorModel, colorModel.createCompatibleSampleModel(16, 16)));
imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
colorModel, colorModel.createCompatibleSampleModel(16, 16)));
try {
if (isBlank(srcFilePath)) {
return false;
} else {
file = new File(srcFilePath);System.out.println(file.length());
src = ImageIO.read(file);
out = new FileOutputStream(descFilePath);
imgWrier.reset();
// 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何
// OutputStream构造
imgWrier.setOutput(ImageIO.createImageOutputStream(out));
// 调用write方法,就可以向输入流写图片
imgWrier.write(null, new IIOImage(src, null, null),
imgWriteParams);
out.flush();
out.close();
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public static boolean isBlank(String string) {
if (string == null || string.length() == 0 || string.trim().equals("")) {
return true;
}
return false;
}
展开全部
劝你还是另求它法比较好。
这些所谓图片格式(除bmp),基本上本就是压缩过的格式,而且这种压缩是有损的,象一个bmp文件压成jpg一般可以小10倍(具体要看压缩时的参数);这个动作就像你把CD音轨抓出来,比如保存成60MB的一个波形文件,压成128K采样的mp3大概就6MB。但是这个6MB的mp3再用其它压缩算法也基本上没办法再压缩了,因为本身就已经是压缩格式,按压缩算法建立词典,压缩到最后有可能反而因为建立压缩词典文件还会变大。
如果想楼主想像的那么好,各家站点、论坛还要限制大家上传的图片、头像的文件大小做什么呢?
这些所谓图片格式(除bmp),基本上本就是压缩过的格式,而且这种压缩是有损的,象一个bmp文件压成jpg一般可以小10倍(具体要看压缩时的参数);这个动作就像你把CD音轨抓出来,比如保存成60MB的一个波形文件,压成128K采样的mp3大概就6MB。但是这个6MB的mp3再用其它压缩算法也基本上没办法再压缩了,因为本身就已经是压缩格式,按压缩算法建立词典,压缩到最后有可能反而因为建立压缩词典文件还会变大。
如果想楼主想像的那么好,各家站点、论坛还要限制大家上传的图片、头像的文件大小做什么呢?
追问
就是啊 客户提的bt需求 要求他们上传的超过2M的图片要自动给他们压缩到2M以后入库 是在不知道该怎么做了 翻遍了api也没看到合适的方法
百度了一下 有人提了个方法 没仔细看 好像是降低像素还是什么 但是会导致图片失真
追答
直接把上传图片限制为2M以下不也是解决方法么。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询