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.