먼저 효과를 살펴보겠습니다.
테스트 하나:
원본 그림:
표현:
테스트 2:
원본 그림:
표현:
코드 부분:
다음과 같이 코드 코드를 복사합니다 .
/**
*
*/
패키지 com.b510;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
java.io.파일 가져오기;
import java.io.FileInputStream;
import java.io.IOException;
java.util.Date 가져오기;
import java.util.Iterator;
javax.imageio.ImageIO 가져오기;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
/**
* @날짜 2012-11-26
* @author xhw
*
*/
공개 클래스 ImageCut {
/**
* 소스 이미지 경로 이름: c:/1.jpg
*/
개인 문자열 srcpath = "e:/poool.jpg";
/**
* 이미지 저장 경로 이름을 잘라냅니다(예: c:/2.jpg).
*/
개인 문자열 하위 경로 = "e:/pool_end";
/**
*jpg 사진 형식
*/
개인 정적 최종 문자열 IMAGE_FORM_OF_JPG = "jpg";
/**
*png 사진 형식
*/
개인 정적 최종 문자열 IMAGE_FORM_OF_PNG = "png";
/**
* 전단점의 x 좌표
*/
개인 정수 x;
/**
* 절단점의 Y좌표
*/
비공개 int y;
/**
* 컷 포인트 너비
*/
개인용 정수 너비;
/**
* 절단점 높이
*/
개인 정수 높이;
공개 ImageCut() {
}
공개 ImageCut(int x, int y, int 너비, int 높이) {
this.x = x;
this.y = y;
this.너비 = 너비;
this.높이 = 높이;
}
public static void main(String[] args)에서 예외가 발생합니다.
ImageCut imageCut = new ImageCut(134, 0, 366, 366);
imageCut.cut(imageCut.getSrcpath(), imageCut.getSubpath());
}
/**
* 지정된 형식을 디코딩할 수 있다고 주장하는 현재 등록된 모든 ImageReader를 포함하는 Iterator를 반환합니다.
* 매개변수: formatName - 비공식 형식 이름(예: "jpeg" 또는 "tiff")을 포함합니다.
*
* @param postFix
* 파일 확장자
* @반품
*/
public Iterator<ImageReader> getImageReadersByFormatName(String postFix) {
스위치(postFix) {
케이스 IMAGE_FORM_OF_JPG:
ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_JPG)을 반환합니다.
케이스 IMAGE_FORM_OF_PNG:
ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_PNG)을 반환합니다.
기본:
ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_JPG)을 반환합니다.
}
}
/**
* 사진을 자르고 자른 새 사진을 저장하세요.
* @param srcpath 소스 이미지 경로
* @param subpath 잘라낸 이미지 저장 경로
* @throwsIOException
*/
public void cut(String srcpath, String subpath)은 IOException을 발생시킵니다.
FileInputStream은 = null입니다.
ImageInputStream iis = null;
노력하다 {
//이미지 파일 읽기
is = new FileInputStream(srcpath);
// 파일의 접미사 이름을 가져옵니다.
String postFix = getPostfix(srcpath);
System.out.println("그림 형식은 다음과 같습니다: " + postFix);
/*
* 지정된 형식을 디코딩할 수 있다고 주장하는 현재 등록된 모든 ImageReader를 포함하는 Iterator를 반환합니다.
* 매개변수: formatName - 비공식 형식 이름(예: "jpeg" 또는 "tiff")을 포함합니다.
*/
Iterator<ImageReader> it = getImageReadersByFormatName(postFix);
ImageReader 리더 = it.next();
// 이미지 스트림 가져오기
iis = ImageIO.createImageInputStream(is);
/*
* <p>iis:Read source.true:앞으로만 검색</p>을 '앞으로만 검색'으로 표시합니다.
* 이 설정은 입력 소스에 포함된 이미지가 순차적으로만 읽혀짐을 의미하며, 판독기가 이전에 읽은 이미지와 관련된 데이터가 포함된 입력 부분을 캐싱하지 않도록 할 수 있습니다.
*/
reader.setInput(iis, true);
/*
* <p>스트림을 디코딩하는 방법을 설명하는 클래스<p> 입력 시 Java 이미지 I/O에서 스트림을 디코딩하는 방법을 지정하는 데 사용됩니다.
* 스트림은 프레임의 맥락에서 이미지 또는 이미지 세트를 변환합니다. 특정 이미지 형식에 대한 플러그인은 ImageReader에서 구현됩니다.
* getDefaultReadParam 메소드는 ImageReadParam의 인스턴스를 반환합니다.
*/
ImageReadParam param = reader.getDefaultReadParam();
/*
* 이미지 자르기 영역. Rectangle은 Rectangle 객체를 통해 좌표 공간의 영역을 지정합니다.
* 왼쪽 상단 정점의 좌표(x, y), 너비, 높이로 이 영역을 정의할 수 있습니다.
*/
직사각형 직사각형 = 새로운 직사각형(x, y, 너비, 높이);
// 픽셀 데이터 디코딩의 대상으로 사용할 BufferedImage를 제공합니다.
param.setSourceRegion(직사각형);
/*
* 제공된 ImageReadParam을 사용하여 index imageIndex로 지정된 객체를 읽고 이를 완전한 객체로 처리합니다.
* BufferedImage가 반환됩니다.
*/
BufferedImage bi = reader.read(0, param);
//새 이미지 저장
ImageIO.write(bi, postFix, new File(subpath + "_" + new Date().getTime() + "." + postFix));
} 마지막으로 {
if(!= null)
is.close();
if (iis != null)
iis.close();
}
}
/**
* inputFilePath의 접미사 이름을 가져옵니다. 예를 들어 "e:/test.pptx"의 접미사 이름은 "pptx"입니다.<br>
*
* @param inputFilePath
* @반품
*/
공개 문자열 getPostfix(String inputFilePath) {
return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);
}
공개 int getHeight() {
반환 높이;
}
공개 무효 setHeight(int 높이) {
this.높이 = 높이;
}
공개 문자열 getSrcpath() {
srcpath를 반환합니다.
}
공공 무효 setSrcpath(문자열 srcpath) {
this.srcpath = srcpath;
}
공개 문자열 getSubpath() {
하위 경로를 반환합니다.
}
공공 무효 setSubpath(문자열 하위 경로) {
this.subpath = 하위 경로;
}
공개 int getWidth() {
반환 너비;
}
공개 무효 setWidth(int 너비) {
this.너비 = 너비;
}
공개 int getX() {
x를 반환;
}
공공 무효 setX(int x) {
this.x = x;
}
공개 int getY() {
y를 반환;
}
공공 무효 setY(int y) {
this.y = y;
}
}