Vamos dar uma olhada no efeito primeiro:
Teste um:
Imagem original:
Renderização:
Teste 2:
Imagem original:
Renderização:
Parte do código:
Copie o código do código da seguinte forma:
/**
*
*/
pacote com.b510;
importar java.awt.Rectangle;
importar java.awt.image.BufferedImage;
importar java.io.File;
importar java.io.FileInputStream;
importar java.io.IOException;
importar java.util.Date;
importar java.util.Iterator;
importar javax.imageio.ImageIO;
importar javax.imageio.ImageReadParam;
importar javax.imageio.ImageReader;
importar javax.imageio.stream.ImageInputStream;
/**
* @data 26/11/2012
* @autor xhw
*
*/
classe pública ImageCut {
/**
* Nome do caminho da imagem de origem, como: c:/1.jpg
*/
string privada srcpath = "e:/pool.jpg";
/**
* Corte o nome do caminho de armazenamento da imagem. Por exemplo: c:/2.jpg.
*/
private String subcaminho = "e:/pool_end";
/**
*formato de imagem jpg
*/
final estático privado String IMAGE_FORM_OF_JPG = "jpg";
/**
*formato de imagem png
*/
final estático privado String IMAGE_FORM_OF_PNG = "png";
/**
* x coordenada do ponto de cisalhamento
*/
privado int x;
/**
* Coordenada Y do ponto de corte
*/
privado privado;
/**
* Largura do ponto de corte
*/
largura interna privada;
/**
* Altura do ponto de corte
*/
altura interna privada;
public ImageCut() {
}
public ImageCut(int x, int y, int largura, int altura) {
isto.x = x;
isto.y = y;
esta.largura = largura;
esta.altura = altura;
}
public static void main(String[] args) lança exceção {
ImageCut imagemCut = new ImageCut(134, 0, 366, 366);
imageCut.cut(imageCut.getSrcpath(), imageCut.getSubpath());
}
/**
* Retorna um Iterator contendo todos os ImageReaders atualmente registrados que afirmam ser capazes de decodificar o formato especificado.
* Parâmetro: formatName - Contém o nome do formato informal (como "jpeg" ou "tiff"), etc.
*
* @param postFix
* Extensão de arquivo
* @retornar
*/
public Iterator<ImageReader> getImageReadersByFormatName(String postFix) {
mudar (postFix) {
caso IMAGE_FORM_OF_JPG:
retornar ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_JPG);
caso IMAGE_FORM_OF_PNG:
retornar ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_PNG);
padrão:
retornar ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_JPG);
}
}
/**
* Corte a imagem e salve a nova imagem recortada.
* @param srcpath caminho da imagem de origem
* @param subpath Cortar caminho de armazenamento da imagem
* @throwsIOException
*/
public void cut(String srcpath, String subpath) lança IOException {
FileInputStream é = null;
ImageInputStream iis = null;
tentar {
//Lê o arquivo de imagem
é = novo FileInputStream(srcpath);
// Obtém o nome do sufixo do arquivo
String postFix = getPostfix(srcpath);
System.out.println("O formato da imagem é: " + postFix);
/*
* Retorna um Iterator contendo todos os ImageReaders atualmente registrados que afirmam ser capazes de decodificar o formato especificado.
* Parâmetro: formatName - Contém o nome do formato informal (como "jpeg" ou "tiff"), etc.
*/
Iterator<ImageReader> it = getImageReadersByFormatName(postFix);
Leitor ImageReader = it.next();
// Obtém fluxo de imagem
iis = ImageIO.createImageInputStream(is);
/*
* <p>iis:Read source.true:Pesquisa apenas para frente</p> Marque como 'Pesquisa apenas para frente'.
* Esta configuração significa que as imagens contidas na fonte de entrada serão lidas apenas sequencialmente, possivelmente permitindo que o leitor evite armazenar em cache as partes da entrada que contêm dados associados a imagens que foram lidas anteriormente.
*/
leitor.setInput(iis, verdadeiro);
/*
* <p>Classe que descreve como decodificar o fluxo<p> Usado para especificar como decodificar o fluxo do Java Image I/O na entrada.
* Stream transforma uma imagem ou conjunto de imagens no contexto de um quadro. Plugins para formatos de imagem específicos serão implementados a partir do ImageReader
* O método getDefaultReadParam retorna uma instância de ImageReadParam.
*/
ImageReadParam param = leitor.getDefaultReadParam();
/*
* Área de recorte de imagem. Rectangle especifica uma área no espaço de coordenadas, através do objeto Rectangle
* As coordenadas (x, y), largura e altura do vértice superior esquerdo podem definir esta área.
*/
Retângulo retângulo = novo Retângulo(x, y, largura, altura);
// Fornece um BufferedImage para usar como destino para decodificar dados de pixel.
param.setSourceRegion(rect);
/*
* Use o ImageReadParam fornecido para ler o objeto especificado pelo índice imageIndex e tratá-lo como um objeto completo
* BufferedImage retorna.
*/
BufferedImage bi = leitor.read(0, param);
//Salva a nova imagem
ImageIO.write(bi, postFix, new File(subcaminho + "_" + new Date().getTime() + "." + postFix));
} finalmente {
se (é! = nulo)
é.close();
if (iis! = nulo)
iis.close();
}
}
/**
* Obtenha o nome do sufixo de inputFilePath, por exemplo: o nome do sufixo de "e:/test.pptx" é: "pptx"<br>
*
* @param inputFilePath
* @retornar
*/
public String getPostfix(String inputFilePath) {
retornar inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);
}
public int getHeight() {
altura de retorno;
}
public void setHeight(int altura) {
esta.altura = altura;
}
string pública getSrcpath() {
retornar srcpath;
}
public void setSrcpath(String srcpath) {
this.srcpath = srcpath;
}
string pública getSubpath() {
subcaminho de retorno;
}
public void setSubpath(String subcaminho) {
this.subpath = subcaminho;
}
public int getLargura() {
largura de retorno;
}
public void setWidth(int largura) {
esta.largura = largura;
}
public int getX(){
retornar x;
}
public void setX(int x) {
isto.x = x;
}
public int getY() {
retornar y;
}
public void setY(int y) {
isto.y = y;
}
}