Прежде всего, потерпите меня, поскольку я не разбираюсь ни в процессах печати, ни в терминологии графики. Этот ответ предполагает (по моим собственным словам), что цель состоит в том, чтобы взять изображение и изменить его так, чтобы было меньше деталей - меньше пикселей, необходимых для отображения изображения, но с сохранением размера. Если окажется, что я неправильно понял цель, не стесняйтесь указать на это. Я либо попробую отредактировать ответ, либо придумаю что-нибудь новое.
Я предлагаю решение, при котором вы берете изображение, уменьшаете его и растягиваете до того же размера:
val path = "Y:\\our\\path\\\\to\\directory\\"
val sourceImage = ImageIO.read(File("${path}original.png"))
val smallerImage = BufferedImage(
sourceImage.width / 2,
sourceImage.height / 2,
sourceImage.type
)
var graphics2D = smallerImage.createGraphics()
graphics2D.drawImage(
sourceImage,
0,
0,
sourceImage.width / 2,
sourceImage.height / 2,
null
)
graphics2D.dispose()
Здесь smallerImage
уменьшено - теперь мы используем в 4 раза меньше пикселей (потому что мы масштабируем на 2 и ширину, и высоту), чем мы изначально использовали.
Это позволяет использовать меньше пикселей, но размер не был сохранен - он был уменьшен. Теперь нам нужно растянуть его до исходного размера, но теперь мы будем использовать меньшее количество пикселей:
val stretched = smallerImage.getScaledInstance(
sourceImage.width,
sourceImage.height,
Image.SCALE_DEFAULT
)
val destination = BufferedImage(
sourceImage.width,
sourceImage.height,
sourceImage.type
)
graphics2D = destination.createGraphics()
graphics2D.drawImage(stretched, 0, 0, null)
graphics2D.dispose()
Наконец, мы сохраняем изображение в файл:
val destinationImageFile = File("${path}destination.png")
ImageIO.write(destination, "png", destinationImageFile)
И мы закончили. Изображения original
и destination
:
Назначение (изменено) изображение (16x16)
Количество сохраненных пикселей определяется исключительно масштабными коэффициентами, которые вы используете. Вам придется поиграть с масштабированием, чтобы добиться точной экономии количества пикселей.