20080930

Ошибка сохранения файла в GIMP при нехватке памяти

При редактировании больших изображений в GIMP иногда можно столкнуться с ситуацией, когда нужные правки уже сделаны, но файл сохранить не удаётся. Ошибка, которую выдаёт GIMP в этом случае связана с тем, что вся доступная память уже израсходована под хранение данных изображения, и запустить дочерний процесс, который сохранит файл, GIMP уже не может. К счастью, это совсем не означает, что результаты редактирования сохранить нельзя и они будут потеряны. Файл можно сохранить, очистив предварительно историю изменений.

Увидеть, сколько занимает изображение в памяти GIMP можно в строке состояния окна изображения. Например, в данном случае изображение занимает в памяти 164 МБ:


Если это значение сопоставимо с размером оперативной памяти компьютера, то GIMP не только будет работать медленно (из-за обращения к диску), но и может испытывать сложности с сохранением изменённого файла. При редактировании изображения это значение растёт.

Однако при большом количестве изменений значительная часть памяти приходится не на хранение самого изображения, а на хранение промежуточных результатов (необходимых, чтобы работала функция «отмены»). Если удалить историю действий, то можно обычно освободить немало памяти. Выбираем в меню редактируемого узображения «Правка → История действий» и видим такой диалог:


На иллюстрации помечена кнопка, позволяющая принудительно очистить историю изменений. После этого перестанет работать функция «Отмены», но зато освободится память.

Вообще, настроить желаемое количество уровней отмены можно в разделе «Окружение» настроек GIMP.

PS: Кто-нибудь знает, каким свободным софтом можно обрабатывать действительно большие изображения (т.е. такие, которые не помещаются в оперативную память)? Желательно, чтобы программа умела подгружать изображение «по частям». Меня интересуют прежде всего операции кадрирования, поворота на произвольный угол, коррекция кривых и цветов. Спасибо читателям за подсказку, что действительно большие изображения можно редактировать в nip2 (обзор здесь). Разбираюсь.

Смотрю с большой надеждой на формат JPEG2000, в котором есть поддержка произвольного доступа к областям изображения, но пока он, похоже, поддерживается только в ImageMagick. При этом ковертация JPEG→JPEG2000 требует много больше памяти, чем размер несжатого TIFF-а с тем же изображением. В придачу большинство просмотрщиков работать с JPEG2000 не могут.