Ridimensiona un'immagine in Java

Rupam Yadav 12 ottobre 2023
  1. Ridimensiona e mostra un’immagine in Java usando BufferedImage.getScaledInstance()
  2. Ridimensiona l’immagine e salva nella directory locale in Java utilizzando Graphics2D e ImageIO
Ridimensiona un'immagine in Java

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:

java ridimensiona immagine 1

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:

java ridimensiona immagine 2

Immagine dopo il ridimensionamento:

java ridimensiona immagine 3 image

Autore: Rupam Yadav
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