求助java压缩图片存储大小的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助java压缩图片存储大小的方法相关的知识,希望对你有一定的参考价值。
需要在代码里处理上传图片的存储大小(不是图片尺寸,图片尺寸已处理),如1M压缩到500KB,求高人指点方法
就常规的几种图片格式吧jpg/jpeg,bmp,gif,png
可以使用Draw这个类,通过改变像素来改变存储大小,实例如下:
public static boolean compressPic(String srcFilePath, String descFilePath) throws IOExceptionFile 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;
参考技术A 劝你还是另求它法比较好。
这些所谓图片格式(除bmp),基本上本就是压缩过的格式,而且这种压缩是有损的,象一个bmp文件压成jpg一般可以小10倍(具体要看压缩时的参数);这个动作就像你把CD音轨抓出来,比如保存成60MB的一个波形文件,压成128K采样的mp3大概就6MB。但是这个6MB的mp3再用其它压缩算法也基本上没办法再压缩了,因为本身就已经是压缩格式,按压缩算法建立词典,压缩到最后有可能反而因为建立压缩词典文件还会变大。
如果想楼主想像的那么好,各家站点、论坛还要限制大家上传的图片、头像的文件大小做什么呢?追问
就是啊 客户提的bt需求 要求他们上传的超过2M的图片要自动给他们压缩到2M以后入库 是在不知道该怎么做了 翻遍了api也没看到合适的方法
百度了一下 有人提了个方法 没仔细看 好像是降低像素还是什么 但是会导致图片失真
直接把上传图片限制为2M以下不也是解决方法么。
本回答被提问者采纳如何调整图片kb大小
可以用PS来调整图片的大小容量。在PS内打开图片,点击【图像】菜单;打开下拉菜单,选择【图像大小】;在宽度或高度框中直接输入想要的大小数值即可。你也可以在另存为时选择JPG格式,并在品质框中选择或手动填写图片质量。具体介绍如下:
方法一、改变图片尺寸
1、用PS打开图片,点击【图像】菜单;
2、打开下拉菜单,选择【图像大小】;
3、弹出【图像大小】对话框,根据自己需求,改变像素大小,点击【确定】即可;
4、再点击菜单栏【文件】,存储为【web所用格式】;
5、在弹出【存储为web所用格式】对话框,可以通过调整比例来调整图片大小,最后选择【存储】即可完成了;
方法二、如果不改变图片尺寸大小的情况,则可以使用降低图片的质量来压缩图片
1、也可以在打开PS的文件菜单,选择【存储为WEB和设备所有的格式】;
2、在格式列表中选择要保存图片的格式,然后选择JPG;
3、在品质框中选择或手动填写图片的质量即可。
参考技术A操作方法如下:
步骤1、右击图片,出现属性选型,点击即可看到图片占用空间的大小。
步骤2、用ps软件打开需要修改大小的图片。
步骤3、选择文件,找到存储或者存储为选项。
步骤4、出现选框,选择页面中图像选项中的品质一项。
步骤5、把品质数值改为合适的数值,点击确定即可。
参考技术B 回答打开需要增加kb大小的照片后点击上方【图像】菜单;2/5在弹出的选项中选择【图像大小】;3/5在图像大小对话框中,根据实际情况,改变像素大小后点击下方【确定】即可;4/5点击上方菜单【文件】-【存储为Web所用格式】;5/5在弹出的对话框中,可以通过调整比例来调整图片kb大小,最后选择【存储】即可设置成功了。
提问谢谢
回答客气啦
参考技术C步骤1、右击图片,出现属性选型,点击即可看到图片占用空间的大小。
步骤2、用ps软件打开需要修改大小的图片。
步骤3、选择文件,找到存储或者存储为选项。
步骤4、出现选框,选择页面中图像选项中的品质一项。
步骤5、把品质数值改为合适的数值,点击确定即可。
参考技术D1、首先点击PS软件里面文件下的打开,将需要设置的图片用PS打开。
2、图片打开之后在,在PS上面就可以看到ps工具栏下面会出现一串字符。
3、然后点击图像,在图像大小设置里面的高度和宽度改小一些。
4、这样就将图片改小了,然后选择这张图片,将它拖到另外一个独立的窗口。
5、然后在新的窗口中右键点击这串字符,选择图像大小进入。
6、进入之后,继续将宽度和高度的数值改小一点,点击确定即可。这样就可以将图片改小了。
以上是关于求助java压缩图片存储大小的方法的主要内容,如果未能解决你的问题,请参考以下文章
java如何实现把一个大图片压缩到指定大小的图片且长宽比不变?