jpeg画像をロスレスで保存する必要があります。私はステガノグラフィーのプロジェクトに取り組んでいますが、Javaは結果を圧縮して保存しています。私はすべてのフォーラムを調査し、すべてを試していますが、うまくいきませんでした。Javaでロスレスjpgを保存するには?
ここでロスレスのための私のコード例は、JPEG画像保存:この処理の後
BufferedImage image = ImageIO.read(new File("sources/image.jpg"));
ImageWriter writer = ImageIO.getImageWritersByFormatName("JPEG").next();
JPEGImageWriteParam jpegParams = new JPEGImageWriteParam(null);
jpegParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
jpegParams.setCompressionQuality(1f);
writer.setOutput(ImageIO.createImageOutputStream(new File("example.jpg")));
writer.write(null, new IIOImage(image,null,null), jpegParams);
writer.dispose();
を私はPSNR値を計算するには、28.53173であり、「example.jpg「のサイズはimage.jpg」よりも大きいです "。
私はJAIライブラリをインポートしようとしていますが、Java 8がJAIをサポートしているかわかりません。
あなたのアルゴリズムの詳細を共有することができますので、あなたのJPEGがロスレスである必要がある理由を理解できますか? jpegがあなたのアルゴリズムの正しいフォーマットではないことや、stegoイメージを特定の方法でエンコードする必要があることが判明するかもしれません。例については、[here](https://stackoverflow.com/questions/29677726/steganography-in-lossy-compression-java/29678676#29678676)を参照してください。 – Reti43
まず、あなたの答えに感謝します。私のアルゴリズムはとても簡単です。表紙/画像をバイナリに変換し、表紙画像、RGBからYCbCr、Y空間の8x8ブロック、各ブロックのDCT、中周波数の最大係数のLSBを読み込みます。すべてのIDCTの後に、YCbCrをRGBに変換して保存します。 私はAndroidアプリケーションでそれを行う必要があり、JPEG書き込みJPEGを読み取る必要があります。 – vakkaya
私たちに見せることができるいくつかの出版物からあなたのアルゴリズムの基礎を得ましたか? JPEGを読み込んでいる場合、ファイルデータからピクセルを再構成する必要はありません。 DCTブロックをメモリにロードし、アルゴリズムごとに変更して、出力ファイルに再エンコードします。そうすれば、変換と量子化のステップを含むJPEG形式のすべての損失の多いものを避けることができます。 – Reti43