Java DIP - Technique de compression d'image

Une image peut facilement être compressée et stockée via Java. La compression d'image consiste à convertir une image en jpg et à la stocker.

Afin de compresser une image, nous lisons l'image et la convertissons en objet BufferedImage.

De plus, nous obtenons un ImageWriter de getImageWritersByFormatName()méthode trouvée dans la classe ImageIO. À partir de cet ImageWriter, créez unImageWriteParamobjet. Sa syntaxe est donnée ci-dessous -

Iterator<ImageWriter> list = ImageIO.getImageWritersByFormatName("jpg");
ImageWriteParam obj = writer_From_List.getDefaultWriteParam();

À partir de cet objet ImageWriteParam, vous pouvez définir la compression en appelant ces deux méthodes qui sont setCompressionMode() et setCompressionQuality(). Leurs syntaxes sont indiquées ci-dessous -

obj.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
obj.setCompressionQuality(0.05f);

La méthode setCompressionMode () prend Mode_EXPLICIT comme paramètre. Certains des autres MODES sont décrits brièvement -

N ° Sr. Les modes
1

MODE_DEFAULT

Il s'agit d'une valeur constante qui peut être transmise aux méthodes pour activer cette fonctionnalité pour les futures écritures.

2

MODE_DISABLED

C'est une valeur constante qui peut être transmise aux méthodes pour désactiver cette fonctionnalité pour les futures écritures.

3

MODE_EXPLICIT

Il s'agit d'une valeur constante qui peut être transmise aux méthodes pour activer cette fonctionnalité pour les futures écritures.

Outre les méthodes de compression, il existe d'autres méthodes fournies par la classe ImageWriteParam. Ils sont décrits brièvement -

N ° Sr. Méthode et description
1

canOffsetTiles()

Il renvoie true si l'enregistreur peut effectuer une mosaïque avec des décalages de grille non nuls lors de l'écriture.

2

getBitRate(float quality)

Il renvoie un flottant indiquant une estimation du nombre de bits de données de sortie pour chaque bit de données d'image d'entrée au niveau de qualité donné.

3

getLocale()

Il retourne les paramètres régionaux actuellement définis, ou null si seuls les paramètres régionaux par défaut sont pris en charge.

4

isCompressionLossless()

Il renvoie true si le type de compression actuel fournit une compression sans perte.

5

unsetCompression()

Il supprime tout type de compression et paramètres de qualité précédents.

6

unsetTiling()

Il supprime tous les paramètres de grille de tuiles précédents spécifiés par les appels à setTiling.

Exemple

L'exemple suivant illustre l'utilisation de la classe ImageWriteParam pour compresser une image -

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

import javax.imageio.*;
import javax.imageio.stream.ImageOutputStream;

class Compression {

   public static void main(String[] args) throws IOException {
   
      File input = new File("digital_image_processing.jpg");
      BufferedImage image = ImageIO.read(input);

      File compressedImageFile = new File("compress.jpg");
      OutputStream os =new FileOutputStream(compressedImageFile);

      Iterator<ImageWriter>writers =  ImageIO.getImageWritersByFormatName("jpg");
      ImageWriter writer = (ImageWriter) writers.next();

      ImageOutputStream ios = ImageIO.createImageOutputStream(os);
      writer.setOutput(ios);

      ImageWriteParam param = writer.getDefaultWriteParam();
      
      param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
      param.setCompressionQuality(0.05f);
      writer.write(null, new IIOImage(image, null, null), param);
      
      os.close();
      ios.close();
      writer.dispose();
   }
}

Production

Lorsque vous exécutez le code donné, il compresse l'image digital_image_processing.jpg à son image compressée équivalente et l'écrit sur le disque dur avec le nom compress.jpg.

Image originale

Image compressée - Facteur de qualité - 0,05

Image compressée - Facteur de qualité - 0,5