Comprimere e convertire immagini in JPG

DOMANDA:

Come convertire un'immagine in JPG in Java?


RISPOSTA:

Java mette a disposizione diversi oggetti che permettono la conversione di un'immagine in JPG/JPEG e anche la regolazione della compressione (e quindi della qualità).

Guardiamo l'esempio TestCompressione, opportunamente commentato per capire tutti i passaggi da intraprendere:
package immagini;

import java.awt.image.*;
import java.io.*;
import java.util.Iterator;

import javax.imageio.*;
import javax.imageio.stream.FileImageOutputStream;

import javax.swing.JFileChooser;

public class TestCompressione {
  public static void main(String args[]) throws Exception {

    BufferedImage immagine = null;

    // Seleziono il file con finestra di dialogo
    JFileChooser fileScelto = new JFileChooser("C:\\");

    int selezione = fileScelto.showDialog(null, "Seleziona il file da aprire");
    if(selezione == JFileChooser.APPROVE_OPTION)
       immagine = ImageIO.read(fileScelto.getSelectedFile());

    System.out.println("Il file selezionato è: "+fileScelto.getSelectedFile());

    System.out.println("Inizio procedure compressione");
    // recupero gli ImageWriters che possono convertire in jpeg
    Iterator<ImageWriter> it = ImageIO.getImageWritersByFormatName("jpg");
    ImageWriter jpgWriter = it.next(); // prendo il primo disponibile
    ImageWriteParam parametri = jpgWriter.getDefaultWriteParam();
    parametri.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    parametri.setCompressionQuality(0.7f); // Imposto la qualità di compressione a 0.7 (0 massima compressione)

    // scrivo in output l'immagine risultante
    FileImageOutputStream out = new FileImageOutputStream(new File("C:\\imgCompressa.jpg"));
    jpgWriter.setOutput(out);
    jpgWriter.write(null, new IIOImage(immagine, null, null), parametri);
    jpgWriter.dispose();
    out.close();

    System.out.println("Fine procedure compressione, il file è stato creato");
  }
}
L'output sarà molto semplice:
Il file selezionato è: C:\immagine.bmp
Inizio procedure compressione
Fine procedure compressione, il file è stato creato

E ovviamente in C:\ sarà generato il file imgCompressa.jpg.

Java mette a disposizione diversi ImageWriters (non solo JPG) come ad esempio BMP, PNG e GIF.
Per ulteriori informazioni a riguardo rimando alla documentazione ufficiale.

Per approfondimenti sul funzionamento e sull'utilizzo del JFileChooser vi consiglio la lettura di questo post.

Commenti

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java