これを少し後部座席に入れなければなりませんでしたが、昨日戻ってきて、その方法を見つけました。基本的には、下のクラスcom.sun.imageio.plugins.png
とカスタムを使用することになりましたImageWriteParam
。
カラーテーブルを自分で作成する必要がありました (それほど難しくなく、バイト配列だけです)。次に、カラー テーブルが に渡されましたImageTypeSpecifier.createIndexed
。返された結果により、ピクセルをコピーしたImageTypeSpecifier
を作成できます。BufferedImage
次に、カスタム PNG ヘッダーを を使用して作成しましPNGMetadata
た (PNG 仕様について多くを読む必要がありましたが、全体的には非常に簡単です)。IIOImage
次に、上記のメタデータと BufferedImage を使用して新しいものを作成しました。
最後に、 を作成し、そこからPNGImageWriter
デフォルトを取得しましImageWriteParam
た。ImageTypeSpecifier
次に、以前からそのsetDestinationType
メソッドに単純に渡しました。最後のステップは、IIOImage と ImageWriteParam を PNGImageWriter に渡すことによって、PNG をディスクに書き込むことでした。
これらのクラスの多くに関するドキュメントは非常にまばらですが、それらの機能は優れています。これを行うことで、ビット深度 1 を含む最小限の PNG を作成し (色が 2 つしかないため)、PNG のサイズを平均 78% 縮小しました!!! 努力する価値は大いにあります。