java壓縮圖片(高寬不變)

import java.awt.Image;  
import java.awt.image.BufferedImage;  
import java.io.File;  
import java.io.IOException;  
  
import javax.imageio.ImageIO;  
  
/*import com.sun.image.codec.jpeg.JPEGCodec;  
import com.sun.image.codec.jpeg.JPEGImageEncoder; */ 
  
public class CompressPicTools {  
      
    public static final long minLength = 200 * 1024;        // 低於200KB的文件不做壓縮處理  
  
    /** 
     * 此方法用於壓縮圖片,保持原有的高寬 
     * @param inputDir 輸入圖文件夾路徑 
     * @param outputDir 輸出圖文件夾路徑 
     * @param inputFileName 輸入圖文件名 
     * @param outputFileName  輸出圖文件名 
     * @return 返回需要的文件名 
     */  
    public static String compressPic(String inputDir, String outputDir, String inputFileName, String outputFileName) {    
        try {  
            // 獲取源文件,如果源文件小於200KB,不做壓縮處理  
            File file = new File(inputDir + inputFileName); 
            if(file.exists()){
            	if(minLength > file.length()) {  
                    return inputFileName;  
                }  
                  
                Image img = ImageIO.read(file);  
                int newWidth = img.getWidth(null);  
                int newHeight = img.getHeight(null);  
                BufferedImage tag = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);  
                tag.getGraphics().drawImage(  
                        img.getScaledInstance(newWidth, newHeight,  
                                Image.SCALE_SMOOTH), 0, 0, null); 
                /*FileOutputStream out = new FileOutputStream(outputDir + outputFileName);  
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
                encoder.encode(tag);
                out.close();*/
                String dstName = outputDir + outputFileName;
                String formatName = dstName.substring(dstName.lastIndexOf(".") + 1);  
                ImageIO.write(tag, /*"GIF"*/ formatName /* format desired */ , new File(dstName) /* target */ );  
                  
                // 壓縮完成後,刪除源文件  
                file.delete(); 
            }else{
            	return "壓縮文件不存在";
            }
            
        } catch (IOException ex) {  
        	System.out.println(ex);
            ex.printStackTrace();  
            return inputFileName;  
        }  
        return outputFileName;  
    }  
    
    public static void main(String[] args) {
    	String inputDir = "D:\\guoxq\\";//輸入文件路徑
    	String outputDir = "D:\\guoxq\\";//輸出文件路徑
    	String inputFileName = "cipian.jpg";//輸入文件名
    	String outputFileName = "newimg.jpg";//輸出文件名
		String fileName = compressPic(inputDir, outputDir, inputFileName, outputFileName);
		System.out.println(fileName);
		//System.exit(0);
	}
}  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章