lossless
Javaで圧縮を使用して「jpeg」ファイルを書き込む方法を教えてくれる人はいますか?
以下のコードを使用してバイトを読み取り、バイトを編集します
WritableRaster raster = image.getRaster();
DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
そして、圧縮せずにバイトを「jpeg」ファイルとして再度書き込む必要がありますlossy
。
lossless
Javaで圧縮を使用して「jpeg」ファイルを書き込む方法を教えてくれる人はいますか?
以下のコードを使用してバイトを読み取り、バイトを編集します
WritableRaster raster = image.getRaster();
DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
そして、圧縮せずにバイトを「jpeg」ファイルとして再度書き込む必要がありますlossy
。
JAI パッケージは、「ロスレス JPEG」形式を保存する機能を提供します。必要なバリアントに応じて、圧縮タイプをJPEG-LS または JPEG-LOSSLESSに設定します。
ただし、ロスレス JPEG が本当に必要かどうかはわかりません。これは、通常の JPEG 形式とはあまり関係のない別の形式です。一般に、これは十分にサポートされているわけではありません。無損失の画像ストレージの場合、通常は PNG のようなものを使用することをお勧めします。
ロスレス イメージ トランスコーディング (つまり、DCT 行列の境界を乱すことなく実行できる一連のトリミングと回転操作) を行う必要がある場合は、jpegtran
現在 IJG ライブラリへの Java バインディングがないため、通常はコマンドを使用して行います。私の知る限りでは。
到着予定時刻:
JAIでそれを行う方法を知っていますか。
setCompressionType
私は自分で試したことはありませんが (以下のコードはテストされていません)、. (もちろん、Java での「簡単な」とは、ねじれた小さなオブジェクトの迷路をネゴシエートして、単純なスイッチを他の場所に設定することを意味します:)
ImageWriter writer= (ImageWriter) ImageIO.getImageWritersByFormatName("jpeg").next();
ImageWriteParam param= writer.getDefaultWriteParam();
param.setCompressionMode(param.MODE_EXPLICIT);
param.setCompressionType("JPEG-LS");
writer.setOutput(ImageIO.createImageOutputStream(new File(path)));
writer.write(null, new IIOImage(image, null, null), param);
JPEG-LS は新しいロスレス JPEG 規格です。元の JPEG-LOSSLESS 標準よりも圧縮率が高くなりますが、サポートはさらに悪くなります。JPEG をサポートするほとんどのアプリケーションは、これらを処理できません。