Home / Programmazione / Java / Resize di immagini in Java
Mattepuffo

Resize di immagini in Java

Resize di immagini in Java

Vediamo una piccola classe, con un solo metodo, per il resize delle immagini in Java.

Ci stanno anche diverse librerie esterne per fare questo, ma su consiglio del forum HTML.it, ho usato gli strumenti standard.

Nello specifico getScaledInstance di Image, che consente queste tre possibilità:

  • impostare altezza e larghezza
  • impostare la larghezza a far calcolare automatica l'altezza
  • impostare l'altezza e far calcolare automaticamente la larghezza

Infatti se facciamo questo, la larghezza verrà calcolata in automatico:

ImageResize ir = new ImageResize();
try {
      ir.resizeImage(new File("immagine.jpg"), "path/to/save/", -1, 800);
} catch (IOException ex) {
      JOptionPane.showMessageDialog(this, ex.getMessage());
}

In pratica abbiamo passato un valore negativo come larghezza (accetta -1).

Vediamo la classe ImageResize:

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.apache.commons.io.FilenameUtils;

public class ImageResize {

    /**
     * Resize delle immagini
     *
     * @param inputImage File di input
     * @param dir Percorso di destinazione salvataggio
     * @param width Larghezza immagine
     * @param height Altezza immagine
     * @throws IOException
     */
    public void resizeImage(File inputImage, String dir, int width, int height) throws IOException {
        Image image = ImageIO.read(inputImage);
        Image newImage = image.getScaledInstance(width, height, Image.SCALE_SMOOTH);
        BufferedImage buf = new BufferedImage(newImage.getWidth(null), newImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = buf.createGraphics();
        g2.drawImage(newImage, 0, 0, null);
        g2.dispose();
        String ext = FilenameUtils.getExtension(inputImage.getName());
        ImageIO.write(buf, ext, new File(dir + inputImage.getName()));
    }

}

Al metodo resizeImage, passiamo quattro parametri:

  • un oggetto File che corrisponde al file da ridimensionare
  • la directory dove salvare il file
  • la larghezza
  • l'altezza

Sotto usiamo il metodo getScaledInstance, passando le dimensioni e il tipo di scale che vogliamo fare.

Poi elaboriamo l'immagine e la salviamo con ImageIO.write:

  • passando il buffer dell'immagine
  • l'estensione del file (presa con la libreria Apache Commons IO, ma non è indispensabile)
  • il percorso di destinazione e il nome del file

Enjoy!