Java图片上传压缩处理

我们在项目中经常会出现图片的上传、压缩处理的情况,例如等比例压缩、按照一定的宽度和高度压缩等,公共代码如下:

  1. import java.awt.Image;    
  2. import java.awt.image.BufferedImage;    
  3. import java.io.File;    
  4. import java.io.FileNotFoundException;    
  5. import java.io.FileOutputStream;    
  6. import java.io.IOException;    
  7.     
  8. import javax.imageio.ImageIO;    
  9.     
  10. import com.sun.image.codec.jpeg.JPEGCodec;    
  11. import com.sun.image.codec.jpeg.JPEGEncodeParam;    
  12. import com.sun.image.codec.jpeg.JPEGImageEncoder;    
  13.     
  14. public class ImageZipUtil {    
  15.     
  16.     /**  
  17.      * 等比例压缩图片文件<br> 先保存原文件,再压缩、上传  
  18.      * @param oldFile  要进行压缩的文件  
  19.      * @param newFile  新文件  
  20.      * @param width  宽度 //设置宽度时(高度传入0,等比例缩放)  
  21.      * @param height 高度 //设置高度时(宽度传入0,等比例缩放)  
  22.      * @param quality 质量  
  23.      * @return 返回压缩后的文件的全路径  
  24.      */    
  25.     public static String zipImageFile(File oldFile,File newFile, int width, int height,    
  26.             float quality) {    
  27.         if (oldFile == null) {    
  28.             return null;    
  29.         }    
  30.         try {    
  31.             /** 对服务器上的临时文件进行处理 */    
  32.             Image srcFile = ImageIO.read(oldFile);    
  33.             int w = srcFile.getWidth(null);    
  34.         //  System.out.println(w);    
  35.             int h = srcFile.getHeight(null);    
  36.         //  System.out.println(h);    
  37.             double bili;    
  38.             if(width>0){    
  39.                 bili=width/(double)w;    
  40.                 height = (int) (h*bili);    
  41.             }else{    
  42.                 if(height>0){    
  43.                     bili=height/(double)h;    
  44.                     width = (int) (w*bili);    
  45.                 }    
  46.             }    
  47.             /** 宽,高设定 */    
  48.             BufferedImage tag = new BufferedImage(width, height,    
  49.                     BufferedImage.TYPE_INT_RGB);    
  50.             tag.getGraphics().drawImage(srcFile, 00, width, height, null);    
  51.             //String filePrex = oldFile.getName().substring(0, oldFile.getName().indexOf('.'));    
  52.             /** 压缩后的文件名 */    
  53.             //newImage = filePrex + smallIcon+  oldFile.getName().substring(filePrex.length());    
  54.     
  55.             /** 压缩之后临时存放位置 */    
  56.             FileOutputStream out = new FileOutputStream(newFile);    
  57.     
  58.             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);    
  59.             JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);    
  60.             /** 压缩质量 */    
  61.             jep.setQuality(quality, true);    
  62.             encoder.encode(tag, jep);    
  63.             out.close();    
  64.     
  65.         } catch (FileNotFoundException e) {    
  66.             e.printStackTrace();    
  67.         } catch (IOException e) {    
  68.             e.printStackTrace();    
  69.         }    
  70.         return newFile.getAbsolutePath();    
  71.     }    
  72.     
  73.     /**  
  74.      * 按宽度高度压缩图片文件<br> 先保存原文件,再压缩、上传  
  75.      * @param oldFile  要进行压缩的文件全路径  
  76.      * @param newFile  新文件  
  77.      * @param width  宽度  
  78.      * @param height 高度  
  79.      * @param quality 质量  
  80.      * @return 返回压缩后的文件的全路径  
  81.      */    
  82.     public static String zipWidthHeightImageFile(File oldFile,File newFile, int width, int height,    
  83.             float quality) {    
  84.         if (oldFile == null) {    
  85.             return null;    
  86.         }    
  87.         String newImage = null;    
  88.         try {    
  89.             /** 对服务器上的临时文件进行处理 */    
  90.             Image srcFile = ImageIO.read(oldFile);    
  91.             int w = srcFile.getWidth(null);    
  92.         //  System.out.println(w);    
  93.             int h = srcFile.getHeight(null);    
  94.         //  System.out.println(h);    
  95.     
  96.             /** 宽,高设定 */    
  97.             BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);    
  98.             tag.getGraphics().drawImage(srcFile, 00, width, height, null);    
  99.             //String filePrex = oldFile.substring(0, oldFile.indexOf('.'));    
  100.             /** 压缩后的文件名 */    
  101.             //newImage = filePrex + smallIcon+ oldFile.substring(filePrex.length());    
  102.     
  103.             /** 压缩之后临时存放位置 */    
  104.             FileOutputStream out = new FileOutputStream(newFile);    
  105.     
  106.             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);    
  107.             JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);    
  108.             /** 压缩质量 */    
  109.             jep.setQuality(quality, true);    
  110.             encoder.encode(tag, jep);    
  111.             out.close();    
  112.         } catch (FileNotFoundException e) {    
  113.             e.printStackTrace();    
  114.         } catch (IOException e) {    
  115.             e.printStackTrace();    
  116.         }    
  117.         return newImage;    
  118.     }    

转自【http://www.open-open.com/lib/view/open1386941736387.html】

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值