자바 이미지 업로드 압축 처리

    :http://www.javaeye.com/topic/266585

1. 그림 형식
    JAVA 의 API 는 매우 좋 습 니 다. com. sun. image. codec. jpeg. JPEG Codec 과 com. sun. image. codec. jpeg. JPEG ImageEncoder 두 가지 유형 은 기본적으로 유형 전환 문 제 를 자동 으로 해결 하여 bmp 전 jpg, png 전 jpg, gif 전 jpg 를 정상적으로 실현 할 수 있 지만 gif 전 gif 의 기능 은 아직 해결 되 지 않 았 습 니 다.
    2. 화면 품질의 문제
    BufferedImage tag = new BufferedImage((int)newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);
    // Image.SCALE_SMOOTH 의 축 약 알고리즘 은 축 약 된 그림 의 평활 도 를 생 성 하 는 우선 순위 가 속도 보다 높 아 생 성 된 그림 의 질 은 좋 지만 속도 가 느 립 니 다.
    tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
    3. 압축 속도
    36MB 의 bmp 그림 (8192 * 6144) 을 (160 * 120) 의 jpg 로 압축 한 5KB 그림 을 테스트 하 는 데 2 ~ 3 초 밖 에 걸 리 지 않 는 다.100 장 (1027 * 768) 의 bmp 그림 을 일괄 처리 하고 (120 * 80) 의 jpg 그림 으로 변환 하 는 데 총 17 초 밖 에 걸 리 지 않 습 니 다.
    4. 사용자 취향 에 따라 압축 모드 선택
    비례 또는 규정된 사이즈 에 따라
    //copressPic (큰 그림 경로, 작은 그림 경로, 큰 그림 파일 이름 생 성, 작은 그림 이름 생 성, 작은 그림 너비 생 성, 작은 그림 높이 생 성, 크기 조정 여부 (기본 값 은 true)
    다음은 소스 코드 입 니 다. 좀 더 완벽 해 질 것 같 으 면 의견 을 주 셨 으 면 좋 겠 습 니 다!!
/**
 *       ,   (jpg、bmp、png、gif  )          
 */
package com.joewalker.test;
 
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
 
/*******************************************************************************
 *     (  )  java   jpg、bmp、png、gif    ,             。       
 * compressPic(     ,       ,      ,       ,       ,       ,      (   true))
 */
 public class CompressPicDemo {
	 private File file = null; //     
	 private String inputDir; //      
	 private String outputDir; //      
	 private String inputFileName; //       
	 private String outputFileName; //       
	 private int outputWidth = 100; //        
	 private int outputHeight = 100; //        
	 private boolean proportion = true; //         (       )
	 public CompressPicDemo() { //      
		 inputDir = "";
		 outputDir = "";
		 inputFileName = "";
		 outputFileName = "";
		 outputWidth = 100;
		 outputHeight = 100;
	 }
	 public void setInputDir(String inputDir) {
		 this.inputDir = inputDir;
	 }
	 public void setOutputDir(String outputDir) {
		 this.outputDir = outputDir;
	 }
	 public void setInputFileName(String inputFileName) {
		 this.inputFileName = inputFileName;
	 }
	 public void setOutputFileName(String outputFileName) {
		 this.outputFileName = outputFileName;
	 }
	 public void setOutputWidth(int outputWidth) {
		 this.outputWidth = outputWidth;
	 }
	 public void setOutputHeight(int outputHeight) {
		 this.outputHeight = outputHeight;
	 }
	 public void setWidthAndHeight(int width, int height) {
		 this.outputWidth = width;
		 this.outputHeight = height;
	 } 
 
	 /*
	  *       
	  *      String path :    
	  */
	 public long getPicSize(String path) {
		 file = new File(path);
		 return file.length();
	 }
 
	 //     
	 public String compressPic() {
		 try {
			 //     
			 file = new File(inputDir + inputFileName);
			 if (!file.exists()) {
				 return "";
			 }
			 Image img = ImageIO.read(file);
			 //           
			 if (img.getWidth(null) == -1) {
				 System.out.println(" can't read,retry!" + "
");
				 return "no";
			 } else {
				 int newWidth; int newHeight;
				 //          
				 if (this.proportion == true) {
					 //                  
					 double rate1 = ((double) img.getWidth(null)) / (double) outputWidth + 0.1;
					 double rate2 = ((double) img.getHeight(null)) / (double) outputHeight + 0.1;
					 //               
					 double rate = rate1 > rate2 ? rate1 : rate2;
					 newWidth = (int) (((double) img.getWidth(null)) / rate);
					 newHeight = (int) (((double) img.getHeight(null)) / rate);
				 } else {
					 newWidth = outputWidth; //        
					 newHeight = outputHeight; //        
				 }
			 	BufferedImage tag = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB); 
 
			 	/*
				 * Image.SCALE_SMOOTH                  
				 *                        
				 */
			 	tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
			 	FileOutputStream out = new FileOutputStream(outputDir + outputFileName);
			 	// JPEGImageEncoder             
			 	JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			 	encoder.encode(tag);
			 	out.close();
			 }
		 } catch (IOException ex) {
			 ex.printStackTrace();
		 }
		 return "ok";
	}
 	public String compressPic (String inputDir, String outputDir, String inputFileName, String outputFileName) {
 		//      
 		this.inputDir = inputDir;
 		//      
 		this.outputDir = outputDir;
 		//       
 		this.inputFileName = inputFileName;
 		//       
 		this.outputFileName = outputFileName;
 		return compressPic();
 	}
 	public String compressPic(String inputDir, String outputDir, String inputFileName, String outputFileName, int width, int height, boolean gp) {
 		//      
 		this.inputDir = inputDir;
 		//      
 		this.outputDir = outputDir;
 		//       
 		this.inputFileName = inputFileName;
 		//       
 		this.outputFileName = outputFileName;
 		//       
 		setWidthAndHeight(width, height);
 		//           
 		this.proportion = gp;
 		return compressPic();
 	} 
 
 	// main  
 	// compressPic(     ,       ,      ,       ,       ,       ,      (   true))
 	public static void main(String[] arg) {
 		CompressPicDemo mypic = new CompressPicDemo();
 		System.out.println("       :" + mypic.getPicSize("e:\\1.jpg")/1024 + "KB");
 		int count = 0; //             
 		for (int i = 0; i < 100; i++) {
 			int start = (int) System.currentTimeMillis();	//     
 			mypic.compressPic("e:\\", "e:\\test\\", "1.jpg", "r1"+i+".jpg", 120, 120, true);
 			int end = (int) System.currentTimeMillis(); //     
 			int re = end-start; //          
 			count += re; System.out.println(" " + (i+1) + "          : " + re + "  ");
 			System.out.println("       :" + mypic.getPicSize("e:\\test\\r1"+i+".jpg")/1024 + "KB");
 		}
 		System.out.println("    :" + count + "  ");
 	}
 }

좋은 웹페이지 즐겨찾기