Größe eines Bildes in Java ändern

Rupam Yadav 12 Oktober 2023
  1. Ändern Sie die Größe und zeigen Sie ein Bild in Java mit BufferedImage.getScaledInstance() an
  2. Bildgröße ändern und im lokalen Verzeichnis in Java mit Graphics2D und ImageIO speichern
Größe eines Bildes in Java ändern

Java kann verschiedene Operationen unterschiedlicher Art ausführen, wie das Lesen, Schreiben oder Löschen einer Datei. In den folgenden Beispielen zeigen wir, wie Sie die Größe eines Bildes in Java mit drei Techniken ändern können.

Ändern Sie die Größe und zeigen Sie ein Bild in Java mit BufferedImage.getScaledInstance() an

Im ersten Beispiel ändern wir die Größe eines Bildes und zeigen es in einem Rahmen an, ohne es irgendwo zu speichern. Hier erstellen wir ein Objekt bufferedImage der Klasse BufferedImage. Die Klasse BufferedImage erweitert die Klasse Image, die die grafischen Bilder als Array rechteckiger Pixel darstellt. Zum Auslesen des Bildes verwenden wir die Funktion ImageIO.read(). Hier ist ImageIO eine Klasse, die statische Methoden wie read und write enthält, um Eingabe- und Ausgabeoperationen durchzuführen.

Wir erhalten unser Bild mit der Methode new File(), die den Klassenkonstruktor File aufruft und die Bildposition als Argument darin übergibt. Sobald wir das Objekt bufferedImage erhalten, verwenden wir es, um die Methode getScaledInstance() aufzurufen, die eine skalierte Version des Bildes erstellt.

Die Funktion getScaledInstance benötigt drei Argumente: Die ersten beiden sind die Breite und Höhe in Pixeln, die wir dem Bild geben möchten, und das letzte Argument ist der Algorithmus, der für die Skalierung verwendet wird. Hier verwenden wir die Funktion Image.SCALE_DEFAULT, die der Klasse mitteilt, den Standard-Sampling-Algorithmus zu verwenden.

Sobald dies erledigt ist, erstellen wir ein Fenster, um das Bild mit dem Objekt JFrame anzuzeigen. Als Layout des Objekts frame setzen wir FlowLayout, das die Komponenten in einer Linie anordnet. Dann legen wir die Größe des Fensters fest; Beachten Sie, dass diese Größe größer als die Höhe und Breite des Bildes sein sollte, um das Bild vollständig anzuzeigen.

Um das Bild schließlich anzuzeigen, erstellen wir ein Objekt von JLabel und rufen die Klasse section auf, die das Bild als Icon setzt. Zuletzt fügen wir das Objekt jLabel zum Objekt frame hinzu und setzen die Sichtbarkeit auf true.

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;

public class ResizeImageExample {
  public static void main(String[] args) throws IOException {
    new ResizeImageExample();
  }

  public ResizeImageExample() throws IOException {
    BufferedImage bufferedImage = ImageIO.read(new File("C:\\Users\\User1\\Pictures\\java.png"));
    Image image = bufferedImage.getScaledInstance(600, 400, Image.SCALE_DEFAULT);

    ImageIcon icon = new ImageIcon(image);
    JFrame frame = new JFrame();
    frame.setLayout(new FlowLayout());
    frame.setSize(800, 600);

    JLabel jLabel = new JLabel();
    jLabel.setIcon(icon);
    frame.add(jLabel);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

Ausgabe:

Java Bildgröße ändern 1

Bildgröße ändern und im lokalen Verzeichnis in Java mit Graphics2D und ImageIO speichern

Bei der zweiten Methode verwenden wir die Klasse Graphics2D, um Grafiken zu erstellen. Der erste Schritt besteht darin, die Bilddatei mit der Methode ImageIo.read() abzurufen, die ein File-Objekt als Argument verwendet, das den Bildpfad enthält. ImageIo.read() gibt das BufferedImage-Objekt bufferedImageInput zurück. Wir erstellen ein weiteres BufferedImage-Objekt, das beim Schreiben des Bildes verwendet wird. Es braucht drei Argumente: die Höhe, die Breite und den Bildtyp.

Nun rufen wir die Methode createGraphics() mit dem bufferdImageOutput-Objekt auf, das ein Graphics2D-Objekt g2d zurückliefert. Dann erstellen wir das Bild mit der Methode drawImage(), die sechs Argumente benötigt. Das erste ist das BufferedImage-Objekt, das zweite und das dritte sind die x- und y-Koordinaten, die entsprechend der Größe hochskaliert werden, wenn beide Werte Null sind. Das vierte und fünfte Argument stellen die neue Höhe und Breite dar, die wir dem Bild geben möchten, und das letzte Argument ist der ImageObserver, der in unserem Fall null ist.

Bevor wir fortfahren, löschen wir den gesamten Kontext und die Ressourcen, die von g2d verwendet werden, mit der Funktion g2d.dispose(). Um das größenveränderte Bild im lokalen Verzeichnis zu speichern, verwenden wir die Funktion ImageIo.write(), die das Objekt bufferedImageOutput, den Namen der neuen Bilddatei und den Konstruktor File mit dem Dateipfad übernimmt.

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ResizeImageExample {
  public static void main(String[] args) throws IOException {
    resizeFile("C:\\Users\\Rupam Saini\\Pictures\\java.png",
        "C:\\Users\\Rupam Saini\\Pictures\\java-resized.png", 500, 500);
  }

  public static void resizeFile(String imagePathToRead, String imagePathToWrite, int resizeWidth,
      int resizeHeight) throws IOException {
    File fileToRead = new File(imagePathToRead);
    BufferedImage bufferedImageInput = ImageIO.read(fileToRead);

    BufferedImage bufferedImageOutput =
        new BufferedImage(resizeWidth, resizeHeight, bufferedImageInput.getType());

    Graphics2D g2d = bufferedImageOutput.createGraphics();
    g2d.drawImage(bufferedImageInput, 0, 0, resizeWidth, resizeHeight, null);
    g2d.dispose();

    String formatName = imagePathToWrite.substring(imagePathToWrite.lastIndexOf(".") + 1);

    ImageIO.write(bufferedImageOutput, formatName, new File(imagePathToWrite));
  }
}

Bild vor der Größenänderung:

Java Bildgröße ändern 2

Bild nach Größenänderung:

Java Bildgröße ändern 3

Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Verwandter Artikel - Java Image