Größe eines Bildes in Java ändern
-
Ändern Sie die Größe und zeigen Sie ein Bild in Java mit
BufferedImage.getScaledInstance()
an -
Bildgröße ändern und im lokalen Verzeichnis in Java mit
Graphics2D
undImageIO
speichern
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:
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:
Bild nach Größenänderung:
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