Ridimensiona un'immagine in Java
-
Ridimensiona e mostra un’immagine in Java usando
BufferedImage.getScaledInstance()
-
Ridimensiona l’immagine e salva nella directory locale in Java utilizzando
Graphics2D
eImageIO
Java può eseguire diverse operazioni di tipo diverso come leggere, scrivere o eliminare un file. Negli esempi seguenti, dimostreremo come è possibile ridimensionare un’immagine in Java utilizzando tre tecniche.
Ridimensiona e mostra un’immagine in Java usando BufferedImage.getScaledInstance()
Nel primo esempio, ridimensioniamo un’immagine e la mostriamo all’interno di una cornice senza salvarla da nessuna parte. Qui creiamo un oggetto bufferedImage
della classe BufferedImage
. La classe BufferedImage
estende la classe Image
rappresentando le immagini grafiche come un array di pixel rettangolari. Per leggere l’immagine, utilizziamo la funzione ImageIO.read()
. Qui, ImageIO
è una classe che contiene metodi statici come read
e write
per eseguire operazioni di input e output.
Otteniamo la nostra immagine usando il metodo new File()
che chiama il costruttore della classe File
e passa la posizione dell’immagine come argomento al suo interno. Una volta ottenuto l’oggetto bufferedImage
, lo usiamo per chiamare il metodo getScaledInstance()
che crea una versione ridimensionata dell’immagine.
La funzione getScaledInstance
accetta tre argomenti: i primi due sono la larghezza e l’altezza in pixel che vogliamo dare all’immagine e l’ultimo argomento è l’algoritmo da usare per il ridimensionamento. Qui, usiamo la funzione Image.SCALE_DEFAULT
, che dice alla classe di usare l’algoritmo di campionamento predefinito.
Una volta fatto, creiamo una finestra per mostrare l’immagine usando l’oggetto JFrame
. Impostiamo il layout dell’oggetto frame
come FlowLayout
, che dispone i componenti in una linea. Quindi, impostiamo la dimensione della finestra; nota che questa dimensione dovrebbe essere maggiore dell’altezza e della larghezza dell’immagine per mostrare l’immagine completamente.
Infine, per mostrare l’immagine, creiamo un oggetto di JLabel
e chiamiamo la classe section
che imposta l’immagine come icona. Infine, aggiungiamo l’oggetto jLabel
all’oggetto frame
e impostiamo la visibilità su 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);
}
}
Produzione:
Ridimensiona l’immagine e salva nella directory locale in Java utilizzando Graphics2D
e ImageIO
Nel secondo metodo, utilizziamo la classe Graphics2D
per creare la grafica. Il primo passo è ottenere il file immagine utilizzando il metodo ImageIo.read()
che accetta un oggetto File
come argomento che contiene il percorso dell’immagine. Il ImageIo.read()
restituisce l’oggetto BufferedImage
, bufferedImageInput
. Creiamo un altro oggetto BufferedImage
da utilizzare durante la scrittura dell’immagine. Richiede tre argomenti: l’altezza, la larghezza e il tipo di immagine.
Ora chiamiamo il metodo createGraphics()
utilizzando l’oggetto bufferdImageOutput
che restituisce un oggetto Graphics2D
, g2d
. Quindi, creiamo l’immagine con il metodo drawImage()
che accetta sei argomenti. Il primo è l’oggetto BufferedImage
, il secondo e il terzo sono le coordinate x e y che aumentano in base alla dimensione se entrambi i valori sono zero. Il quarto e il quinto argomento rappresentano la nuova altezza e larghezza che vogliamo dare all’immagine, e l’ultimo argomento è l’ImageObserver
che è null
nel nostro caso.
Prima di procedere, disponiamo di tutto il contesto e le risorse utilizzate da g2d
utilizzando la funzione g2d.dispose()
. Per salvare l’immagine ridimensionata nella directory locale, utilizziamo la funzione ImageIo.write()
che prende l’oggetto bufferedImageOutput
, il nome da dare al nuovo file immagine e il costruttore File
con il percorso del file.
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));
}
}
Immagine prima del ridimensionamento:
Immagine dopo il ridimensionamento:
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