So speichern Sie ein BufferedImage als Datei

Lesezeit: 4 Minuten

Benutzer-Avatar
Ankur

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);

  • Stellen Sie außerdem sicher, dass die Ausgabedatei vorhanden ist. Wenn dies nicht der Fall ist, wird write() (fälschlicherweise) eine NullPointerException auslösen

    – Cody S

    23. Oktober 2014 um 18:52 Uhr

  • umgeben mit einem try/catch.

    – Lou Morda

    12. November 2014 um 18:57 Uhr

  • Nicht fangen NullPointerExceptionverwenden if (outputfile.exists())

    – Danon

    27. Mai 2020 um 0:01 Uhr

Benutzer-Avatar
Kartik Chugh

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.

Benutzer-Avatar
Raj Geschick

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);

Benutzer-Avatar
Erich Leschinski

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:

  1. Erstellt eine Datei namens MyFile.png.
  2. Das Bild ist 500 x 500 Pixel groß.
  3. Überschreibt die vorhandene Datei.
  4. Die Farbe des Bildes ist schwarz mit einem blauen Streifen über der Oberseite.

Benutzer-Avatar
Zon

  1. Herunterladen und hinzufügen imgscalr-lib-xxjar und imgscalr-lib-xx-javadoc.jar zu Ihren Projektbibliotheken.
  2. In deinem Code:

    import static org.imgscalr.Scalr.*;
    
    public static BufferedImage resizeBufferedImage(BufferedImage image, Scalr.Method scalrMethod, Scalr.Mode scalrMode, int width, int height)  {
        BufferedImage bi = image;
        bi = resize( image, scalrMethod, scalrMode, width, height);
    return bi;
    }
    
    // Save image:
    ImageIO.write(Scalr.resize(etotBImage, 150), "jpg", new File(myDir));
    

Benutzer-Avatar
Erich Leschinski

Als Einzeiler:

ImageIO.write(Scalr.resize(ImageIO.read(...), 150));

1345570cookie-checkSo speichern Sie ein BufferedImage als Datei

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy