자바 이미지 업로드 압축 처리
: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 + " ");
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.