JavaDIP-画像圧縮技術

画像はJavaを介して簡単に圧縮および保存できます。画像の圧縮には、画像をjpgに変換して保存することが含まれます。

画像を圧縮するために、画像を読み取り、BufferedImageオブジェクトに変換します。

さらに、ImageWriterは getImageWritersByFormatName()ImageIOクラスにあるメソッド。このImageWriterから、ImageWriteParamオブジェクト。その構文を以下に示します-

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

このImageWriteParamオブジェクトから、次の2つのメソッドを呼び出すことで圧縮を設定できます。 setCompressionMode() そして setCompressionQuality()。それらの構文は以下のとおりです-

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

setCompressionMode()メソッドは、パラメーターとしてMode_EXPLICITを取ります。他のモードのいくつかを簡単に説明します-

シニア番号 モード
1

MODE_DEFAULT

これは定数値であり、将来の書き込みでその機能を有効にするためにメソッドに渡すことができます。

2

MODE_DISABLED

これは、将来の書き込みのためにその機能を無効にするためにメソッドに渡される可能性のある定数値です。

3

MODE_EXPLICIT

これは定数値であり、将来の書き込みでその機能を有効にするためにメソッドに渡すことができます。

圧縮メソッドとは別に、ImageWriteParamクラスによって提供される他のメソッドがあります。それらは簡単に説明されています-

シニア番号 方法と説明
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

元の画像

圧縮画像-品質係数-0.05

圧縮画像-品質係数-0.5