Java Graphics2D интерполяция не работает на изображениях с измененным размером - PullRequest
0 голосов
/ 28 июня 2019

Я хочу изменить размер изображения до меньшего размера, подходящего для миниатюр, и экспортировать его.Проблема в том, что результирующее изображение выглядит очень плохо с большим количеством видимых псевдонимов, как будто оно использует действительно простой алгоритм.

Я читал много статей об этом, которые предлагают использовать подсказки рендеринга для обеспечения качественного рендеринга и бикубической интерполяции.но они, похоже, ни на что не влияют, похоже, они просто не относятся к окончательному изображению.Я также попробовал подсказки по сглаживанию (которые тоже не работали), но я думаю, что они для рисования.

Для простоты я покажу только код, который выполняет изменение размера и запись, и я будуукажите результирующие размеры для полученного изображения.

    final BufferedImage imageOriginal = ImageIO.read(new File("/some-path/arch3.jpg"));
int newWidth = 267, newHeight = 400;
    BufferedImage imageResized = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
    Graphics2D g2d = (Graphics2D) imageResized.getGraphics();
    g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
    g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
    g2d.drawImage(imageOriginal, 0, 0, imageResized.getWidth(), imageResized.getHeight(), 0, 0, imageOriginal.getWidth(), imageOriginal.getHeight(), null);

     try {
         ImageIO.write(imageResized, "jpg", new File("/some-path/arch3_converted.jpg"));
     } catch (Exception ioException) {
       System.out.println(ioException.toString());
     } 

Это исходное изображение: https://drive.google.com/open?id=1qsZFQWWneBlHAahV2s5CwlxlCYvnHiU8 (4480 × 6720). Это преобразованный результат: https://drive.google.com/open?id=1WEcYb7QRlurOK-_dHr_BAk1HrLxPkdIl (267x400).Вы можете видеть в результате (особенно в строках), что это не так.

...