2014-01-31 6 views
1

Сегодня я играю с методом, который обрезает и изменяет размер изображения с разрешением 3264x2448.java-манипуляция изображения с ограниченным пространством кучи

Площадь кучи JVM составляет всего 64 МБ.

я всегда получаю «утечки памяти», когда я загрузить этот файл с помощью метода:

BufferedImage bImage = ImageIO.read(stream); 

Есть другой способ, чтобы изменить его без идти в утечкой памяти, или единственная проблема, это маленький размер пустое пространство?

Этот размер изображения составляет 3 мб, почему он занимает 50 мб в кучном пространстве?

Заранее спасибо, извините, если мой вопрос глупо, но это странно для меня

Byee

ответ

1

Когда-то я боролся with the same question. Я могу сказать, что это было трудное время, пытаясь загрузить изображение в память, потому что не было предела тому, насколько на самом деле может быть изображение. Итак, я пошел с решением Magic Magic. У этого есть свои недостатки: он потреблял довольно много ресурсов моего компьютера, когда ему приходилось работать с большим изображением (но я предполагаю, что он может быть настроен, на самом деле не тратит на него много времени).

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

+1

Большое спасибо за ваш ответ, я прочитал ваш пост, но мой метод работает на сервлете в tomcat. Я могу использовать Image Magic? это библиотека или мне нужно установить ее в SO, как в программу? –

+0

Eeverything возможно :) ImageMagic - это всего лишь набор команд командной строки/оболочки. Если вы установите его на сервер, вы можете выполнить его из сервлета. http://stackoverflow.com/questions/15847231/processbuilder-start-returns-0-but-doesnt-execute-shell-script –

+0

«Все возможно» хороший ответ: D так «магия изображения» не использует кучу чтобы я мог пройти через утечку памяти? единственная проблема заключается в том, что если хостинг может установить этот инструмент правильно? –

1

1) Размер изображения в файле размер структурированных данных, сжимаются (например, в формате jpeg) в файле на диске.

2) Данные в памяти - это объектное представление вашего изображения, поэтому оно может быть намного больше, чем ресурсы изображения в файле.

3) Невозможно решить проблему без увеличения объема памяти. Посмотрите на это: What does Java option -Xmx stand for?

+0

Очень спасибо за Ваш ответ, Вы подтвердили, что я боюсь :). этот метод запускается в tomcat и получает изображение из формы, есть ли способ заблокировать загрузку этого изображения, если размер больше 2 МБ? –

+0

@AndreaCatania Конечно. Посмотрите на этот ответ: http://stackoverflow.com/questions/8091428/setting-file-size-restrictions-when-uploading-files-with-jersey Это о 'Джерси', но ответ может быть применен к' tomcat 'тоже. – Andremoniy

+0

ohh! хорошо, но как я могу остановить загрузку после ограничения максимального размера? Могу ли я использовать «Магия изображения», чтобы избежать проблемы? –

1

Этот размер изображения составляет 3 мб, почему он занимает 50 мб в кучном пространстве?

Изображение сжимается, в памяти он распаковывается, что означает в вашем случае:

3264 * 2448 * 4 = 31 MB // 4 byte per pixel 
Смежные вопросы