wake-up-neo.net

So speichern Sie ein BufferedImage als Datei

Ich verwende die Bibliothek imgscalr Java, um die Größe eines Bildes zu ändern.

Das Ergebnis eines resize () - Methodenaufrufs ist ein BufferedImage-Objekt. Ich möchte dies jetzt als Datei speichern (normalerweise .jpg).

Wie kann ich das machen? Ich möchte von BufferedImage -> File gehen, aber vielleicht ist dies nicht der richtige Ansatz?

100
Ankur
File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);

Sie können ein BufferedImage-Objekt mit der write-Methode der javax.imageio.ImageIO -Klasse speichern. Die Signatur der Methode sieht so aus:

public static boolean write(RenderedImage im, String formatName, File output) throws IOException

Hier ist im die zu schreibende RenderedImage, 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. Ein Beispiel für die Verwendung der Methode für das PNG-Dateiformat ist unten dargestellt:

ImageIO.write(image, "png", file);
19
Raj Adroit

Die Antwort liegt in der Java Documentation's Tutorial zum Schreiben/Speichern eines Bildes .

Die Klasse Image I/O Bietet die folgende Methode zum Speichern eines Bildes:

static boolean ImageIO.write(RenderedImage im, String formatName, File output)  throws IOException

Das Tutorial erklärt das

Die BufferedImage-Klasse implementiert die RenderedImage-Schnittstelle.

es kann also 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, den write -Aufruf mit einem try-Block zu umgeben, da die Methode gemäß der API ein IOException "auslöst, wenn ein Fehler tritt beim Schreiben auf "

Außerdem werden das Ziel, die Parameter, die Rückgaben und die Auslöser 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 deren Inhalt verworfen.

Parameter:

im - ein zu schreibendes RenderedImage.

formatName - Ein String, der 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.

Wirft:

IllegalArgumentException - wenn ein Parameter null ist.

IOException - wenn beim Schreiben ein Fehler auftritt.

Jedoch kann formatName noch ziemlich vage und mehrdeutig scheinen; das Tutorial klärt es ein wenig auf:

Die ImageIO.write-Methode ruft den Code auf, der das Schreiben eines PNG-Writer-Plug-Ins durch PNG implementiert. Der Begriff Plug-In wird verwendet, da Image I/O erweiterbar ist und eine Vielzahl von Formaten unterstützen kann.

Die folgenden Standard-Plugins für Bildformate sind jedoch immer vorhanden: JPEG, PNG, GIF, BMP und WBMP.

Für die meisten Anwendungen reicht es aus, eines dieser Standard-Plugins zu verwenden. Sie haben den Vorteil, leicht verfügbar zu sein.

Es gibt jedoch weitere Formate, die Sie verwenden können:

Die Image-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 ImageIO-Klasse verwenden. Diese Methoden geben ein Array von Zeichenfolgen zurück, in denen alle in dieser JRE unterstützten Formate aufgelistet sind.

String writerNames[] = ImageIO.getWriterFormatNames();

Das zurückgegebene Array von Namen enthält alle zusätzlichen installierten Plug-Ins. Jeder dieser Namen kann als Formatname für die Auswahl eines Bildschreibers verwendet werden.

Ein vollständiges und praktisches Beispiel finden Sie in Oracle's SaveImage.Java - Beispiel.

10
K_7

Erstellen und speichern Sie ein Java.awt.image.bufferedImage in der 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 mit dem Namen 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 oben.
9
Eric Leschinski
  1. Laden Sie imgscalr-lib-x.x.jar und imgscalr-lib-x.x-javadoc.jar zu Ihren Projektbibliotheken herunter.
  2. In Ihrem 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));
    
1
Zon

Als Einlage:

ImageIO.write(Scalr.resize(ImageIO.read(...), 150));
0
Nicolas Modrzyk