Я читал многие связанные вопросы и другие веб-ресурсы в течение нескольких дней, но я просто не могу найти решение.Масштабировать большие изображения с помощью Java
- Я хочу уменьшить очень большие изображения (например, 1300 x 27000 пикселей).
- Я не могу использовать большее пространство кучи для затмения, чем 1024.
- Я скорее не хочу использовать внешний инструмент, такой как JMagick, так как я хочу экспортировать одну исполняемую банку для запуска на других устройствах. Также из того, что я читал, я не уверен, что даже JMagick мог бы делать это масштабирование очень больших изображений. Кто-нибудь знает?
- Все, что я пробовал до сих пор, приводит к «OutOfMemoryError: Java heap space» I trieg, eg. coobird.thumbnailator или awt.Graphics2D, ...
Производительность и качество не являются самыми важными факторами. В основном я просто хочу быть уверенным, что все размеры изображений можно уменьшить, не исчерпывая кучу пространства.
Итак, есть ли способ масштабирования изображений? может быть в небольших кусках, так что полное изображение не нужно загружать? Или любой другой способ сделать это?
В качестве обходного пути было бы достаточно, если бы я мог просто сделать миниатюру меньшей части изображения. Но я думаю, что обрезка большого изображения будет иметь те же проблемы, что и масштабирование большого изображения?
Спасибо и приветствую!
[EDIT:] С Thumbnailator
Thumbnails.of(new File(".../20150601161616.png"))
.size(160, 160);
работ для конкретного изображения, но
Thumbnails.of(new File(".../20150601161616.png"))
.size(160, 160)
.toFile(new File(".../20150601161616_t.png"));
бежит из памяти.
Загружается ли только оригинальное изображение из памяти? Или это изменение размера, которое исчерпывает память? – satnam
Вы посмотрели ImageProducer/ImageConsumer? не помните, есть ли производители, загружающие куски, но это то, что вам нужно: загрузка в куски изображения, масштабирование их и запись в файл перед обработкой следующего фрагмента. если для этого нет производителя по умолчанию, вам придется декодировать изображение самостоятельно. Изменить: если вы найдете подходящего производителя, вы можете использовать PixelGrabber для выполнения этой задачи. – BeyelerStudios
Необработанное изображение такого размера с глубиной цвета 24 бит должно по-прежнему потреблять только 100 мегабайт (133 для глубины цвета 32 бит). – biziclop