Java 이미지 압축 코드
다음과 같이 코드 코드를 복사합니다 .
패키지 com.img;
java.awt.Image 가져오기;
import java.awt.image.BufferedImage;
java.io.파일 가져오기;
import java.io.FileOutputStream;
import java.io.IOException;
javax.imageio.ImageIO 가져오기;
com.sun.image.codec.jpeg.JPEGCodec을 가져옵니다.
com.sun.image.codec.jpeg.JPEGImageEncoder 가져오기;
/**
*
* @author 설탕을 넣은 콜라
*/
공개 클래스 CompressPicDemo {
개인 파일 file = null; // 파일 객체
private String inputDir; //맵 경로 입력
private String outputDir; // 출력 그래프 경로
private String inputFileName; //이미지 파일명 입력
private String outputFileName; // 출력 이미지 파일 이름
private int outputWidth = 100; //기본 출력 이미지 너비
private int outputHeight = 100; //기본 출력 그림 높이
private boolean ratio = true; // 마크를 비례적으로 스케일링할지 여부(기본값은 비례 스케일링)
public CompressPicDemo() { //변수 초기화
inputDir = "";
출력디렉터 = "";
입력파일이름 = "";
출력파일명 = "";
출력폭 = 100;
출력높이 = 100;
}
공공 무효 setInputDir(문자열 inputDir) {
this.inputDir = 입력Dir;
}
공공 무효 setOutputDir(문자열 출력Dir) {
this.outputDir = 출력Dir;
}
공공 무효 setInputFileName(문자열 inputFileName) {
this.inputFileName = 입력파일이름;
}
공공 무효 setOutputFileName(문자열 출력파일 이름) {
this.outputFileName = 출력파일이름;
}
공공 무효 setOutputWidth(int outputWidth) {
this.outputWidth = 출력폭;
}
공공 무효 setOutputHeight(int outputHeight) {
this.outputHeight = 출력높이;
}
공개 무효 setWidthAndHeight(int 너비, int 높이) {
this.outputWidth = 너비;
this.outputHeight = 높이;
}
/*
* 이미지 크기 얻기
* 매개변수 문자열 경로 전달: 이미지 경로
*/
공개 긴 getPicSize(문자열 경로) {
파일 = 새 파일(경로);
return file.length();
}
//이미지 처리
공개 문자열 압축Pic() {
노력하다 {
//소스파일을 구한다
파일 = 새 파일(inputDir + inputFileName);
if (!file.exists()) {
반품 "";
}
이미지 img = ImageIO.read(파일);
// 이미지 형식이 올바른지 확인
if (img.getWidth(null) == -1) {
System.out.println(" 읽을 수 없습니다. 다시 시도하세요!" + "<BR>");
"아니요"를 반환합니다.
} 또 다른 {
int newWidth;
// 비례 스케일링인지 확인
if (this.proportion == true) {
// 비례적인 크기 조정을 위해 출력 이미지의 너비와 높이를 계산합니다.
double rate1 = ((double) img.getWidth(null)) / (double) outputWidth + 0.1;
double rate2 = ((double) img.getHeight(null)) / (double) outputHeight + 0.1;
// 더 큰 줌 비율에 따라 줌 제어를 수행합니다.
이중 속도 = 속도1 > 속도2 ? 속도1 : 속도2;
newWidth = (int) (((double) img.getWidth(null)) / rate);
newHeight = (int) (((double) img.getHeight(null)) / rate);
} 또 다른 {
newWidth = img.getWidth(null); // 출력 이미지 너비
newHeight = img.getHeight(null); // 출력 이미지 높이
}
BufferedImage 태그 = 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 인코더 = JPEGCodec.createJPEGEncoder(out);
인코더.인코드(태그);
종료.닫기();
}
} catch (IOException ex) {
ex.printStackTrace();
}
"확인"을 반환합니다.
}
공개 문자열 압축Pic(문자열 inputDir, 문자열 출력Dir, 문자열 inputFileName, 문자열 출력FileName) {
//이미지 경로 입력
this.inputDir = 입력Dir;
//출력 그래프 경로
this.outputDir = 출력Dir;
// 이미지 파일명을 입력하세요.
this.inputFileName = 입력파일이름;
// 출력 이미지 파일명
this.outputFileName = 출력파일이름;
압축Pic()을 반환합니다.
}
공개 문자열 압축Pic(문자열 inputDir, 문자열 출력Dir, 문자열 inputFileName, 문자열 출력 파일 이름, int 너비, int 높이, 부울 gp) {
//이미지 경로 입력
this.inputDir = 입력Dir;
//출력 그래프 경로
this.outputDir = 출력Dir;
// 이미지 파일명을 입력하세요.
this.inputFileName = 입력파일이름;
// 출력 이미지 파일명
this.outputFileName = 출력파일이름;
//이미지 길이와 너비 설정
setWidthAndHeight(너비, 높이);
// 비례 스케일링 표시인지 여부
this.비율 = gp;
압축Pic()을 반환합니다.
}
// 메인 테스트
//compressPic(큰 그림 경로, 작은 그림 경로 생성, 큰 그림 파일 이름, 작은 그림 텍스트 이름 생성, 작은 그림 너비 생성, 작은 그림 높이 생성, 비례적으로 크기를 조정할지 여부(기본값은 true))
공개 정적 무효 메인(String[] arg) {
CompressPicDemo mypic = 새로운 CompressPicDemo();
System.out.println("입력 사진 크기: " + mypic.getPicSize("e://1.jpg")/1024 + "KB");
mypic.compressPic("e://", "e://test//", "1.jpg", "r1.jpg", 120, 120, false);
}
}