代码实现图片压缩

332 阅读1分钟

通过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

yuqn.jpg

setCompressionQuality()参数0.5f,大小156kb

newImg.jpg

setCompressionQuality()参数0.1f,大小52.9kb

newImg.jpg

setCompressionQuality()参数0.01f,大小24.2kb

newImg.jpg

通过上面效果图,我没可以看到图片像素随着setCompressionQuality()参数的减小而减低,压缩后的图片无法恢复原来像素(原图不会被删除),如果图片对我们来说比较重要的话,建议使用合适的参数,以免造成影响。

以上思路来自“沉默王二”,内容有所修改,如有错误请指出来。