JAVA图片压缩质量

jdk1.5之前的不支持PNG格式的图片,之后支持,下面先来一个传进文件传出文件方式的:

Java代码   收藏代码
  1. public static void main(String[] args)  
  2.     {  
  3.         if(compressPic("D:/Program Files/myftp/1.jpg""D:/Program Files/myftp/ssss.jpg"))  
  4.         {  
  5.             System.out.println("压缩成功!");   
  6.         }  
  7.         else  
  8.         {  
  9.             System.out.println("压缩失败!");   
  10.         }  
  11.     }  
  12.       
  13.   
  14.     public static boolean compressPic(String srcFilePath, String descFilePath)  
  15.     {  
  16.         File file = null;  
  17.         BufferedImage src = null;  
  18.         FileOutputStream out = null;  
  19.         ImageWriter imgWrier;  
  20.         ImageWriteParam imgWriteParams;  
  21.   
  22.         // 指定写图片的方式为 jpg  
  23.         imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();  
  24.         imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(null);  
  25.         // 要使用压缩,必须指定压缩方式为MODE_EXPLICIT  
  26.         imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);  
  27.         // 这里指定压缩的程度,参数qality是取值0~1范围内,  
  28.         imgWriteParams.setCompressionQuality((float)0.1);  
  29.         imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);  
  30.         ColorModel colorModel = ColorModel.getRGBdefault();  
  31.         // 指定压缩时使用的色彩模式  
  32.         imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel, colorModel  
  33.                 .createCompatibleSampleModel(1616)));  
  34.   
  35.         try  
  36.         {  
  37.             if(StringUtils.isBlank(srcFilePath))  
  38.             {  
  39.                 return false;  
  40.             }  
  41.             else  
  42.             {  
  43.                 file = new File(srcFilePath);  
  44.                 src = ImageIO.read(file);  
  45.                 out = new FileOutputStream(descFilePath);  
  46.   
  47.                 imgWrier.reset();  
  48.                 // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何 OutputStream构造  
  49.                 imgWrier.setOutput(ImageIO.createImageOutputStream(out));  
  50.                 // 调用write方法,就可以向输入流写图片  
  51.                 imgWrier.write(nullnew IIOImage(src, nullnull), imgWriteParams);  
  52.                 out.flush();  
  53.                 out.close();  
  54.             }  
  55.         }  
  56.         catch(Exception e)  
  57.         {  
  58.             e.printStackTrace();  
  59.             return false;  
  60.         }  
  61.         return true;  
  62.     }  

 下面是传进byte[],传出byte[]数组的,稍微修改即可即可,(data为传过来的byte[]数组)

Java代码   收藏代码
  1. ByteArrayInputStream is = new ByteArrayInputStream(data);  
  2.   
  3. BufferedImage src = null;  
  4. ByteArrayOutputStream out = null;  
  5. ImageWriter imgWrier;  
  6. ImageWriteParam imgWriteParams;  
  7.   
  8. // 指定写图片的方式为 jpg  
  9. imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();  
  10. imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(null);  
  11. // 要使用压缩,必须指定压缩方式为MODE_EXPLICIT  
  12. imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);  
  13. // 这里指定压缩的程度,参数qality是取值0~1范围内,  
  14. imgWriteParams.setCompressionQuality((float)0.1/data.length);  
  15.                    
  16. imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);  
  17. ColorModel colorModel = ColorModel.getRGBdefault();  
  18. // 指定压缩时使用的色彩模式  
  19. imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel, colorModel  
  20.         .createCompatibleSampleModel(1616)));  
  21.   
  22. try  
  23. {  
  24.     src = ImageIO.read(is);  
  25.     out = new ByteArrayOutputStream(data.length);  
  26.   
  27.     imgWrier.reset();  
  28.     // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何 OutputStream构造  
  29.     imgWrier.setOutput(ImageIO.createImageOutputStream(out));  
  30.     // 调用write方法,就可以向输入流写图片  
  31.     imgWrier.write(nullnew IIOImage(src, nullnull), imgWriteParams);  
  32.       
  33.     out.flush();  
  34.     out.close();  
  35.     is.close();  
  36.     data = out.toByteArray();  
  37. }  
  38. catch(Exception e)  
  39. {  
  40.     e.printStackTrace();  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值