Сначала посмотрим на эффект:
Тест первый:
Исходное изображение:
Рендеринг:
Тест 2:
Исходное изображение:
Рендеринг:
Часть кода:
Скопируйте код кода следующим образом:
/**
*
*/
пакет com.b510;
импортировать java.awt.Rectangle;
импортировать java.awt.image.BufferedImage;
импортировать java.io.File;
импортировать java.io.FileInputStream;
импортировать java.io.IOException;
импортировать java.util.Date;
импортировать java.util.Iterator;
импортировать javax.imageio.ImageIO;
импортировать javax.imageio.ImageReadParam;
импортировать javax.imageio.ImageReader;
импортировать javax.imageio.stream.ImageInputStream;
/**
* @дата 26.11.2012
* @author xhw
*
*/
общественный класс ImageCut {
/**
* Путь к исходному изображению, например: c:/1.jpg.
*/
частная строка srcpath = "e:/pool.jpg";
/**
* Вырезать имя пути хранения изображения. Например: c:/2.jpg.
*/
частный String subpath = "e:/pool_end";
/**
*формат изображения jpg
*/
частная статическая финальная строка IMAGE_FORM_OF_JPG = "jpg";
/**
*формат изображения png
*/
частная статическая окончательная строка IMAGE_FORM_OF_PNG = "png";
/**
* координата x точки сдвига
*/
частный int x;
/**
* Координата Y точки резки
*/
частный int y;
/**
* Ширина точки обрезки
*/
частная ширина int;
/**
* Высота точки резки
*/
частная высота int;
общественный ImageCut() {
}
public ImageCut(int x, int y, int ширина, int высота) {
это.х = х;
это.у = у;
this.width = ширина;
this.height = высота;
}
public static void main(String[] args) выдает исключение {
ImageCut imageCut = новый ImageCut(134, 0, 366, 366);
imageCut.cut(imageCut.getSrcpath(), imageCut.getSubpath());
}
/**
* Возвращает итератор, содержащий все зарегистрированные в данный момент устройства ImageReaders, которые утверждают, что могут декодировать указанный формат.
* Параметр: 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 = нуль;
ImageInputStream iis = ноль;
пытаться {
//Читаем файл изображения
is = новый FileInputStream (srcpath);
// Получаем суффикс имени файла
Строка postFix = getPostfix(srcpath);
System.out.println("Формат изображения: " + postFix);
/*
* Возвращает итератор, содержащий все зарегистрированные в данный момент устройства ImageReaders, которые утверждают, что могут декодировать указанный формат.
* Параметр: 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 при вводе.
* Поток преобразует изображение или набор изображений в контексте кадра. Плагины для определенных форматов изображений будут реализованы из их ImageReader.
* Метод getDefaultReadParam возвращает экземпляр ImageReadParam.
*/
Параметр ImageReadParam = reader.getDefaultReadParam();
/*
* Область обрезки изображения. Прямоугольник определяет область в пространстве координат с помощью объекта Rectangle.
* Координаты (x, y), ширина и высота верхней левой вершины могут определять эту область.
*/
Прямоугольник rect = новый прямоугольник (x, y, ширина, высота);
// Предоставляем BufferedImage, который будет использоваться в качестве цели для декодирования данных пикселей.
param.setSourceRegion(прямой);
/*
* Используйте предоставленный ImageReadParam для чтения объекта, указанного индексом imageIndex, и рассматривайте его как полный
* BufferedImage возвращает результат.
*/
BufferedImage bi = reader.read(0, param);
//Сохраняем новое изображение
ImageIO.write(bi, postFix, новый файл(подпуть + "_" + новая дата().getTime() + "." + postFix));
} окончательно {
если (есть != ноль)
есть.закрыть();
если (iis != ноль)
iis.закрыть();
}
}
/**
* Получите имя-суффикс inputFilePath, например: имя-суффикс "e:/test.pptx": "pptx"<br>
*
* @param inputFilePath
* @возвращаться
*/
общественная строка getPostfix (String inputFilePath) {
вернуть inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);
}
общественный int getHeight() {
высота возврата;
}
public void setHeight(int height) {
this.height = высота;
}
публичная строка getSrcpath() {
вернуть исходный путь;
}
public void setSrcpath (String srcpath) {
this.srcpath = исходный путь;
}
публичная строка getSubpath() {
возврат подпути;
}
public void setSubpath (String subpath) {
this.subpath = подпуть;
}
общественный int getWidth () {
ширина возврата;
}
public void setWidth (int width) {
this.width = ширина;
}
общественный int getX() {
вернуть х;
}
общественный недействительный setX (int x) {
это.х = х;
}
общественный интервал getY() {
вернуть y;
}
общественный недействительный setY (int y) {
это.у = у;
}
}