Werfen wir zunächst einen Blick auf die Wirkung:
Testen Sie eins:
Originalbild:
Darstellung:
Test 2:
Originalbild:
Darstellung:
Codeteil:
Kopieren Sie den Codecode wie folgt:
/**
*
*/
Paket com.b510;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
java.io.File importieren;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
/**
* @Datum 26.11.2012
* @author xhw
*
*/
öffentliche Klasse ImageCut {
/**
* Pfadname des Quellbilds, z. B. c:/1.jpg
*/
private String srcpath = "e:/poool.jpg";
/**
* Bildspeicherpfadnamen ausschneiden. Zum Beispiel: c:/2.jpg
*/
private String subpath = "e:/pool_end";
/**
*jpg-Bildformat
*/
privater statischer finaler String IMAGE_FORM_OF_JPG = "jpg";
/**
*PNG-Bildformat
*/
privater statischer finaler String IMAGE_FORM_OF_PNG = "png";
/**
* x-Koordinate des Scherpunkts
*/
private int x;
/**
* Y-Koordinate des Schnittpunkts
*/
private Int y;
/**
* Schnittpunktbreite
*/
private int-Breite;
/**
* Höhe der Schnittstelle
*/
private int-Höhe;
public ImageCut() {
}
public ImageCut(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = Breite;
this.height = Höhe;
}
public static void main(String[] args) löst eine Ausnahme aus {
ImageCut imageCut = new ImageCut(134, 0, 366, 366);
imageCut.cut(imageCut.getSrcpath(), imageCut.getSubpath());
}
/**
* Gibt einen Iterator zurück, der alle aktuell registrierten ImageReader enthält, die behaupten, das angegebene Format dekodieren zu können.
* Parameter: formatName – Enthält den informellen Formatnamen (z. B. „jpeg“ oder „tiff“) usw.
*
* @param postFix
* Dateierweiterung
* @zurückkehren
*/
public Iterator<ImageReader> getImageReadersByFormatName(String postFix) {
switch (postFix) {
Fall IMAGE_FORM_OF_JPG:
return ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_JPG);
Fall IMAGE_FORM_OF_PNG:
return ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_PNG);
Standard:
return ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_JPG);
}
}
/**
* Schneiden Sie das Bild zu und speichern Sie das zugeschnittene neue Bild.
* @param srcpath Quellbildpfad
* @param subpath Bildspeicherpfad ausschneiden
* @throwsIOException
*/
public void cut(String srcpath, String subpath) wirft eine IOException {
FileInputStream ist = null;
ImageInputStream iis = null;
versuchen {
//Bilddatei lesen
is = new FileInputStream(srcpath);
// Den Suffixnamen der Datei abrufen
String postFix = getPostfix(srcpath);
System.out.println("Das Bildformat ist: " + postFix);
/*
* Gibt einen Iterator zurück, der alle aktuell registrierten ImageReader enthält, die behaupten, das angegebene Format dekodieren zu können.
* Parameter: formatName – Enthält den informellen Formatnamen (z. B. „jpeg“ oder „tiff“) usw.
*/
Iterator<ImageReader> it = getImageReadersByFormatName(postFix);
ImageReader-Reader = it.next();
// Bildstream abrufen
iis = ImageIO.createImageInputStream(is);
/*
* <p>iis:Read source.true:Nur vorwärts suchen</p> Markieren Sie es als „Nur vorwärts suchen“.
* Diese Einstellung bedeutet, dass in der Eingabequelle enthaltene Bilder nur nacheinander gelesen werden, wodurch der Leser möglicherweise das Zwischenspeichern derjenigen Teile der Eingabe vermeiden kann, die Daten enthalten, die mit Bildern verknüpft sind, die zuvor gelesen wurden.
*/
reader.setInput(iis, true);
/*
* <p>Klasse, die beschreibt, wie der Stream dekodiert wird<p> Wird verwendet, um anzugeben, wie der Stream von Java Image I/O bei der Eingabe dekodiert wird
* Stream transformiert ein Bild oder eine Reihe von Bildern im Kontext eines Frames. Plugins für bestimmte Bildformate werden von ihrem ImageReader implementiert
* Die Methode getDefaultReadParam gibt eine Instanz von ImageReadParam zurück.
*/
ImageReadParam param = reader.getDefaultReadParam();
/*
* Bildzuschneidebereich. Rechteck gibt einen Bereich im Koordinatenraum durch das Rechteckobjekt an
* Die Koordinaten (x, y), Breite und Höhe des oberen linken Scheitelpunkts können diesen Bereich definieren.
*/
Rechteck rect = neues Rechteck(x, y, Breite, Höhe);
// Ein BufferedImage bereitstellen, das als Ziel für die Dekodierung von Pixeldaten verwendet werden soll.
param.setSourceRegion(rect);
/*
* Verwenden Sie das bereitgestellte ImageReadParam, um das durch den Index imageIndex angegebene Objekt zu lesen und es als vollständig zu behandeln
* BufferedImage kehrt zurück.
*/
BufferedImage bi = reader.read(0, param);
//Neues Bild speichern
ImageIO.write(bi, postFix, new File(subpath + „_“ + new Date().getTime() + „.“ + postFix));
} Endlich {
if (ist != null)
is.close();
if (iis != null)
iis.close();
}
}
/**
* Rufen Sie den Suffixnamen von inputFilePath ab, zum Beispiel: Der Suffixname von „e:/test.pptx“ lautet: „pptx“<br>
*
* @param inputFilePath
* @zurückkehren
*/
public String getPostfix(String inputFilePath) {
return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);
}
public int getHeight() {
Rückkehrhöhe;
}
public void setHeight(int height) {
this.height = Höhe;
}
öffentlicher String getSrcpath() {
return srcpath;
}
public void setSrcpath(String srcpath) {
this.srcpath = srcpath;
}
öffentlicher String getSubpath() {
Unterpfad zurückgeben;
}
public void setSubpath(String subpath) {
this.subpath = Unterpfad;
}
public int getWidth() {
Rückgabebreite;
}
public void setWidth(int width) {
this.width = Breite;
}
public int getX() {
x zurückgeben;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
y zurückgeben;
}
public void setY(int y) {
this.y = y;
}
}