通过java代码实现图片压缩以降低图片像素,总体思路如下:
获取图片-对图片进行编码-创建输出流-配置压缩信息-释放资源
思路很重要的,有了这个思路就方便我们对代码实现的了解,接下来就是代码来实现了:
public static void main(String[] args) throws IOException {
// 获取图片,读取到bufferedimage对象中
File input=new File("yuqn.jpg");
BufferedImage image= ImageIO.read(input);
// 通过格式对图片就行编码
Iterator<ImageWriter> writers=ImageIO.getImageWritersByFormatName("jpg");
ImageWriter writer=(ImageWriter) writers.next();
System.out.println(writer);
// 创建输出流对象
File compressedImageFile=new File("newImg.jpg");
OutputStream os=new FileOutputStream(compressedImageFile);
ImageOutputStream ios= ImageIO.createImageOutputStream(os);
writer.setOutput(ios);
// 通过配置进行压缩,setCompressionMode()的参数有多种,这里用了其中的一种,setCompressionQuality()中的参数为0-1,质量分别由小到大
ImageWriteParam param=writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.5f);
writer.write(null,new IIOImage(image,null,null),param);
// 释放资源
os.close();
ios.close();
writer.dispose();
}
接下来是效果图:(图片来源网络,仅供参考)
原图,大小319kb
setCompressionQuality()参数0.5f,大小156kb
setCompressionQuality()参数0.1f,大小52.9kb
setCompressionQuality()参数0.01f,大小24.2kb
通过上面效果图,我没可以看到图片像素随着setCompressionQuality()参数的减小而减低,压缩后的图片无法恢复原来像素(原图不会被删除),如果图片对我们来说比较重要的话,建议使用合适的参数,以免造成影响。
以上思路来自“沉默王二”,内容有所修改,如有错误请指出来。