Java图片上传压缩处理

来源:互联网 发布:新加坡域名后缀 编辑:程序博客网 时间:2024/05/18 00:40
  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, 0, 0, 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, 0, 0, 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.     }   
0 0
原创粉丝点击