Ich benutze die imgscalr Java-Bibliothek zum Ändern der Größe eines Bildes .
Das Ergebnis eines resize()-Methodenaufrufs ist ein BufferedImage-Objekt. Ich möchte dies nun als Datei (normalerweise .jpg) speichern.
Wie kann ich das machen? Ich möchte abgehen BufferedImage
-> File
aber vielleicht ist das nicht der richtige Ansatz?
File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);
Die Antwort liegt in der Java-Dokumentation Tutorial zum Schreiben/Speichern eines Bildes.
Das Image I/O
Die Klasse bietet die folgende Methode zum Speichern eines Bildes:
static boolean ImageIO.write(RenderedImage im, String formatName, File output) throws IOException
Das Tutorium erklärt das
Die BufferedImage-Klasse implementiert die RenderedImage-Schnittstelle.
so kann es in der Methode verwendet werden.
Zum Beispiel,
try {
BufferedImage bi = getMyImage(); // retrieve image
File outputfile = new File("saved.png");
ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
// handle exception
}
Es ist wichtig, die zu umgeben write
Anruf mit a Block versuchen denn gem die APIwirft die Methode eine IOException
“Wenn beim Schreiben ein Fehler auftritt”
Außerdem werden das Ziel, die Parameter, Rückgaben und Würfe der Methode ausführlicher erläutert:
Schreibt ein Bild mit einem beliebigen ImageWriter, der das angegebene Format unterstützt, in eine Datei. Wenn bereits eine Datei vorhanden ist, wird ihr Inhalt verworfen.
Parameter:
im – ein zu schreibendes RenderedImage.
formatName – eine Zeichenfolge, die den informellen Namen des Formats enthält.
output – eine Datei, in die geschrieben werden soll.
Kehrt zurück:
false, wenn kein geeigneter Writer gefunden wird.
Würfe:
IllegalArgumentException – wenn irgendein Parameter null ist.
IOException – wenn beim Schreiben ein Fehler auftritt.
Jedoch, formatName
kann immer noch ziemlich vage und mehrdeutig erscheinen; Das Tutorial klärt es ein wenig auf:
Die ImageIO.write-Methode ruft den Code auf, der das PNG-Schreiben als „PNG-Writer-Plug-In“ implementiert. Der Begriff Plug-In wird verwendet, da Image I/O erweiterbar ist und eine Vielzahl von Formaten unterstützen kann.
Aber die folgenden Standard-Bildformat-Plugins: JPEG, PNG, GIF, BMP und WBMP sind immer vorhanden.
Für die meisten Anwendungen reicht es aus, eines dieser Standard-Plugins zu verwenden. Sie haben den Vorteil, dass sie schnell verfügbar sind.
Es gibt jedoch zusätzliche Formate, die Sie verwenden können:
Die Bild-E/A-Klasse bietet eine Möglichkeit, Unterstützung für zusätzliche Formate einzufügen, die verwendet werden können, und es gibt viele solcher Plug-Ins. Wenn Sie daran interessiert sind, welche Dateiformate in Ihrem System geladen oder gespeichert werden können, können Sie die Methoden getReaderFormatNames und getWriterFormatNames der Klasse ImageIO verwenden. Diese Methoden geben ein String-Array zurück, das alle in dieser JRE unterstützten Formate auflistet.
String writerNames[] = ImageIO.getWriterFormatNames();
Das zurückgegebene Array von Namen enthält alle zusätzlich installierten Plug-Ins, und jeder dieser Namen kann als Formatname verwendet werden, um einen Bildschreiber auszuwählen.
Ein vollständiges und praktisches Beispiel finden Sie bei Oracle SaveImage.java
Beispiel.
Sie können eine speichern BufferedImage
Objekt mit der Write-Methode des javax.imageio.ImageIO
Klasse. Die Signatur der Methode sieht so aus:
public static boolean write(RenderedImage im, String formatName, File output) throws IOException
Hier im
ist der RenderedImage
geschrieben werden, formatName
ist der String, der den informellen Namen des Formats enthält (z. B. png) und output
ist das Dateiobjekt, in das geschrieben werden soll. Eine beispielhafte Verwendung der Methode für das PNG-Dateiformat ist unten dargestellt:
ImageIO.write(image, "png", file);
Erstellen und speichern Sie ein java.awt.image.bufferedImage in einer Datei:
import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
public class Main{
public static void main(String args[]){
try{
BufferedImage img = new BufferedImage(
500, 500, BufferedImage.TYPE_INT_RGB );
File f = new File("MyFile.png");
int r = 5;
int g = 25;
int b = 255;
int col = (r << 16) | (g << 8) | b;
for(int x = 0; x < 500; x++){
for(int y = 20; y < 300; y++){
img.setRGB(x, y, col);
}
}
ImageIO.write(img, "PNG", f);
}
catch(Exception e){
e.printStackTrace();
}
}
}
Anmerkungen:
- Erstellt eine Datei namens MyFile.png.
- Das Bild ist 500 x 500 Pixel groß.
- Überschreibt die vorhandene Datei.
- Die Farbe des Bildes ist schwarz mit einem blauen Streifen über der Oberseite.
Als Einzeiler:
ImageIO.write(Scalr.resize(ImageIO.read(...), 150));