Java-dip-image-compression-technique
Java DIP-画像圧縮技術
画像は、Javaを使用して簡単に圧縮および保存できます。 画像の圧縮には、画像をjpgに変換して保存することが含まれます。
画像を圧縮するために、画像を読み取ってBufferedImageオブジェクトに変換します。
さらに、ImageIOクラスにある* getImageWritersByFormatName()メソッドからImageWriterを取得します。 このImageWriterから、 *ImageWriteParam オブジェクトを作成します。 その構文は以下のとおりです-
Iterator<ImageWriter> list = ImageIO.getImageWritersByFormatName("jpg");
ImageWriteParam obj = writer_From_List.getDefaultWriteParam();
このImageWriteParamオブジェクトから、* setCompressionMode()および setCompressionQuality()*の2つのメソッドを呼び出すことにより、圧縮を設定できます。 それらの構文は以下のとおりです-
obj.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
obj.setCompressionQuality(0.05f);
setCompressionMode()メソッドは、パラメーターとしてMode_EXPLICITを取ります。 他のモードのいくつかは簡単に説明されています-
Sr.No. | Modes |
---|---|
1 |
MODE_DEFAULT これは、将来の書き込みでその機能を有効にするためにメソッドに渡すことができる定数値です。 |
2 |
MODE_DISABLED これは、将来の書き込みでその機能を無効にするためにメソッドに渡される定数値です。 |
3 |
MODE_EXPLICIT これは、将来の書き込みでその機能を有効にするためにメソッドに渡すことができる定数値です。 |
圧縮メソッドとは別に、ImageWriteParamクラスによって提供される他のメソッドがあります。 彼らは簡単に説明されています-
Sr.No. | Method & Description |
---|---|
1 |
canOffsetTiles() ライターが書き込み中にゼロ以外のグリッドオフセットを使用してタイリングを実行できる場合、trueを返します。 |
2 |
getBitRate(float quality) 指定された品質レベルでの入力画像データの各ビットの出力データのビット数の推定値を示すフロートを返します。 |
3 |
getLocale() 現在設定されているロケールを返します。デフォルトのロケールのみがサポートされている場合はnullを返します。 |
4 |
isCompressionLossless() 現在の圧縮タイプが可逆圧縮を提供する場合、trueを返します。 |
5 |
unsetCompression() 以前の圧縮タイプと品質設定を削除します。 |
6 |
unsetTiling() setTilingの呼び出しで指定された以前のタイルグリッドパラメーターを削除します。 |
例
次の例は、ImageWriteParamクラスを使用して画像を圧縮する方法を示しています-
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();
}
}
出力
指定されたコードを実行すると、画像 digital_image_processing.jpg が同等の圧縮画像に圧縮され、 compress.jpg という名前でハードディスクに書き込まれます。