Java конвертировать формат изображения с низким объемом памяти - PullRequest
5 голосов
/ 01 сентября 2010

Я пишу веб-приложение, которое позволяет пользователю загружать изображения в нескольких форматах (например, png, jpg, bmp). После загрузки изображения система должна преобразовать его в «png» и масштабировать до предварительно определенного разрешения.

Для преобразования изображения я использую удобный метод:

javax.imageio.ImageIO.write(im, type, baos);

Вот здесь и начинается проблема. Первым аргументом Image javax.imageio.ImageIO.write является RenderedImage . Документ Java утверждает, что единственной известной реализацией является BufferedImage .

Я пытаюсь найти способ конвертировать java.awt.Image в BufferedImage, но это не представляется возможным. Однако можно нарисовать изображение на BufferedImage .

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

Ответы [ 5 ]

5 голосов
/ 06 марта 2012

Попробуйте библиотеку миниатюр: http://code.google.com/p/thumbnailator/

Пример кода:

Thumbnails.of("large-picture.jpg")
        .scale(1.0)
        .outputFormat("png")
        .toOutputStream(os);

Библиотека предлагает также гораздо больше, таких как масштабирование, изменение размера, обрезка, вращение, водяные знаки и т. Д.

1 голос
/ 01 сентября 2010
1 голос
/ 01 сентября 2010

Вы можете использовать одно буферизованное изображение снова и снова, используя subimage для соответствующего размера, когда пришло время использовать метод ImageIO.write

0 голосов
/ 01 сентября 2010

Запустите собственный конвертер, такой как netpbm или imagemagick.

0 голосов
/ 01 сентября 2010

Вы можете взглянуть на реализацию BufferedImage и реализовать свою собственную (возможно, на основе файловой реализации?).Эти классы обычно довольно просты для чтения, часто на 50-70% комментариев и ясно написаны.

Они выдают источники, почему бы не использовать их?

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