Используйте PngEncoderB для преобразования BufferedImage в байтовый массив в кодировке PNG.
Вы можете применить к нему фильтр, который поможет подготовить изображение для лучшей оптимизации.Это то, что делает OptiPNG, только OptiPNG вычисляет, какой фильтр даст вам наилучшее сжатие.
Возможно, вам придется попробовать применить каждый фильтр, чтобы увидеть, какой из них лучше для вас.С 2-битным цветом, я думаю, единственный фильтр, который может помочь, это «вверх», поэтому я предполагаю, что это тот, который нужно использовать.
Как только вы получите изображение в байтовый массив в формате PNG, вы можете написатьчто прямо в файл.