Вопрос или проблема
У меня есть TIF изображение размером 1.8ГБ, которое я пытаюсь открыть на своем компьютере с Ubuntu 18.04.1 LTS. У меня 8 ГБ оперативной памяти и 2 ГБ места подкачки. Однако я не могу открыть изображение в стандартном просмотрщике изображений Gnome (пишет “Размеры TIFF изображения слишком большие”), в Shotwell (говорит “Оригинальный файл фотографии отсутствует: [путь к файлу]”), в Gimp (вылазят ошибки), в виртуальной машине Windows 7 с 4 ГБ RAM (говорит, что недостаточно оперативной памяти, хотя свободно более 2.5 ГБ), или в feh, который ведет себя так:
$ feh DO_NOT_OPEN.tif
TIFFFetchNormalTag: Warning, Incompatible type for "RichTIFFIPTC"; tag ignored.
feh WARNING: DO_NOT_OPEN.tif - No Imlib2 loader for that file format
feh: No loadable images specified.
See 'man feh' for detailed usage information
Есть ли способ открыть это изображение в Ubuntu?
(Для любопытных, изображение вот. Я назвал его так, потому что в первый раз, когда пытался открыть, оно вызывало краш системы ¯\_(ツ)_/¯ )
Почему я не могу открыть изображение в никаком просмотрщике?
Проблема, вероятно, заключается в оперативной памяти и/или процессоре.
TIFF изображение сжато с помощью LZW. Когда приложение хочет его отобразить, сначала необходимо его распаковать. И тут в игру вступают оперативная память и процессор. Кроме того, в зависимости от приложения, могут быть буферы, которые также требуют оперативной памяти.
Я провел некоторые (не научные) эксперименты и заметил различия между приложениями на трех этапах: при загрузке изображения, после загрузки изображения и при увеличении масштаба.
Shotwell занимал до 5 ГБ оперативной памяти при открытии файла, а затем снижался до 2 ГБ. Когда я увеличивал масштаб, он поднимался до 7 ГБ.
Gimp потреблял до 5 ГБ и оставался на этом уровне при просмотре изображения и увеличении масштаба. Потребление оперативной памяти постепенно увеличивалось при редактировании изображения.
GwenView занимал до 3.8 ГБ при загрузке и снижался до 2 ГБ после. При увеличении масштаба он поднимался до 2.7 ГБ.
Ваш лучший выбор — попробовать GwenView (по умолчанию в Kubuntu, но также может быть установлен в стандартном Ubuntu).
Какие у меня есть возможности, если изображение слишком большое для оперативной памяти?
В общем случае, если изображение слишком велико для оперативной памяти, можно его разделить, используя convert
из пакета imagemagick
.
Вам нужно увеличить стандартные лимиты, которые определены в /etc/ImageMagick-6/policy.xml
(номер 6 может измениться в будущих версиях). Вам нужно изменить максимальный размер в пикселях, определенный в следующих строках:
<policy domain="resource" name="width" value="16KP"/>
<policy domain="resource" name="height" value="16KP"/>
KP означает килопиксели, то есть тысячи пикселей. В вашем случае изображение имеет размеры 40000×12788 пикселей, так что нужно изменить ширину на что-то большее 40KP, например 41KP.
Кроме того, вам нужно увеличить максимальный размер дискового пространства:
<policy domain="resource" name="disk" value="1GiB"/>
на что-то разумное, например 10GiB.
Чтобы разделить изображение на 5×3 частей и создать один файл для каждой части, выполните следующую команду:
convert -crop 5x3@ inputfile.tif outputfile%0d.tif
Для получения дополнительной информации о convert
, смотрите man convert или ознакомьтесь с документацией.
Возможно, немного не по теме, но вот быстрый и грязный bash-скрипт, который разбивает изображение и создает HTML-страницу, отображающую обзор, где вы можете нажать на изображение, чтобы открыть его в полном разрешении. Сохраните его как, например, tile_image.sh
и вызовите его как ./tile_image.sh оригинальноеИзображение плиткиX плиткиY
, где плиткиX — количество горизонтальных плиток, а плиткиY — количество вертикальных плиток.
#!/bin/bash
INPUT_FILE=$1
TILES_X=$2
TILES_Y=$3
OUTPUT_FILE=${INPUT_FILE%.*}_tile_%0d.png
convert -crop $TILES_X"x"$TILES_Y\@ $INPUT_FILE $OUTPUT_FILE
HTML_FILE=${INPUT_FILE%.*}_tile_view.html
echo "<html><body><style type="text/css">table,tr,td,a {padding:0;border-spacing:0} img:hover {opacity:.9}</style><table>" > $HTML_FILE
X=0
Y=0
while [ $Y -lt $TILES_Y ]; do
echo "<tr>" >> $HTML_FILE
while [ $X -lt $TILES_X ]; do
TILE_NUMBER=$(echo $Y*$TILES_X+$X | bc -l)
TILE_NAME=${INPUT_FILE%.*}_tile_$TILE_NUMBER.png
THUMBNAIL=${INPUT_FILE%.*}_tile_$TILE_NUMBER"_thumb.png"
convert -resize 100x100 $TILE_NAME $THUMBNAIL
echo "<td><a href=\""$(basename $TILE_NAME)"\"><img src=\""$(basename $THUMBNAIL)"\"></a></td>" >> $HTML_FILE
let X=X+1
done
let X=0
echo "</tr>" >> $HTML_FILE
let Y=Y+1
done
echo "</table></body></html>" >> $HTML_FILE
Тест
Я тестировал просмотр файла Tiff размера 1.7 ГБ на Dell Precision M4800 с 16 ГБ RAM и Ubuntu 18.04.1 LTS с Wayland. Я также тестировал с gimp
на Dell Latitude E7240 с 8 ГБ RAM и 18.04.1 LTS persistent live с Xorg.
Общий объем использования оперативной памяти, включая операционную систему, измеряется с помощью free -m
.
-
gimp
– работает лучше всего для меня на полном разрешении (без задержек), 6143 МБ оперативной памяти. Работает хорошо как с 16 ГБ оперативной памяти, так и с 8 ГБ оперативной памяти. -
shotwell
– также работает на полном разрешении (без задержек), 7920 МБ оперативной памяти (после некоторой прокрутки горизонтально и вертикально на полном разрешении) -
gpicview
– работает, но медленно (не удалось показать полное разрешение напрямую, но работает при постепенном увеличении до полного разрешения, общее использование оперативной памяти при показе и увеличении 3016 МБ оперативной памяти, но 4219 МБ оперативной памяти во время загрузки). -
feh
– не работает “Нет загрузчика ImLib2 для этого формата файла” eog
– не работает “слишком большое изображение”ristretto
– не работает (молча, показывает миниатюру, но не картинку)
Заключение
С Ubuntu и 8 ГБ оперативной памяти можно просмотреть это изображение с помощью нескольких просмотрщиков, и редактор gimp
действительно хорошо работает для меня. С 6 ГБ оперативной памяти следует выбрать легковесный просмотрщик, а с 4 ГБ вероятно придется подождать некоторое время для подкачки.
Обратите внимание, что я измерил общий объем использования оперативной памяти (включая операционную систему).
Финальный комментарий
Это отличное изображение, которое стоит увеличивать инструментами, которые у вас есть. Я должен добавить, что инструмент увеличения на веб-сайте работает хорошо с Firefox на моем компьютере с 4 ГБ оперативной памяти, я мог достичь уровня увеличения, соответствующего полному разрешению 1.7 ГБ файла Tiff, и я мог прокручивать по горизонтали и вертикали, чтобы увидеть всю картину.
Установите qgis
как в разделе Ubuntu на странице загрузки qgis
заменив Suites: your-distributions-codename
на:
Suites: focal
или Suites: noble
(и т.д.)
Перейдите в меню: Слой
> Добавить слой
> Добавить растровый слой
Выберите файл .tif
Примечание: протестировано с успехом с файлом ОП (1.7Gb), он потреблял около 500 МБ оперативной памяти для qgis и между 500 – 800 МБ для изображения в зависимости от масштаба
Для подобной задачи разумно временно увеличить ваше пространство подкачки, что потребует создания файла подкачки, его форматирования, и добавления с помощью утилиты swapon
. Это то, для чего предназначена подкачка – задачи, которые вы редко выполняете, но которые требуют много памяти, когда это необходимо.
Вы можете рассмотреть возможность наличия большего объема подкачки на современной системе в любом случае – наличие по крайней мере 6 ГБ заставляет меня чувствовать себя безопасно, но это зависит от того, какие операции требующие большого объема памяти вы выполняете время от времени. Во всяком случае, добавление файла подкачки на лету – это способ сделать это без перезагрузки или перепартиционирования, и таким образом, который позволяет вам позже удалить этот файл и вернуть пространство. Следующие инструкции, например, не сохранятся после перезагрузки.
Создайте файл подкачки:
sudo fallocate -l 10G /swapfile
(Вы можете использовать dd
вместо fallocate, если знаете его параметры)
Отформатируйте его как подкачку:
sudo mkswap /swapfile
Активируйте его как подкачку:
sudo swapon /swapfile
Опционально: перед активацией вы можете установить для него разрешения 600, чтобы предотвратить чтение или запись других процессов – хотя они уже не должны иметь возможность записывать в него.
Важно: Подкачка, конечно, работает медленнее, чем оперативная память – на множество порядков величин, и для того, чтобы прочитать любую память в подкачке, она должна быть загружена обратно, что может сначала потребовать выгрузки другой памяти в оперативной памяти в подкачку. Так что это будет медленный процесс, в зависимости от структуры доступа к памяти, используемой работающим программным обеспечением – например, если программа последовательно обрабатывает данные это будет не так медленно, как если бы она обращалась к данным случайным образом. Лучше всего выполнить минимальное количество необходимых шагов и уменьшить размер изображения как можно скорее, чтобы ослабить зависимость от подкачки.
Ответ или решение
Чтобы открыть чрезвычайно большой графический файл, например, TIFF-изображение размером 1.8 ГБ на Ubuntu 18.04.1 LTS с ограниченной оперативной памятью, следуйте данным рекомендациям.
Понимание проблемы
Оперативной памяти, объёмом 8 ГБ и файла подкачки в 2 ГБ, может быть недостаточно для просмотра такого крупного изображения, особенно если стандартные приложения, такие как Gnome Image Viewer, Shotwell или GIMP, выдают ошибки из-за нехватки ресурсов RAM.
Возможные решения
-
Увеличение объема файла подкачки:
Создание дополнительного swap-файла — рациональный шаг для временного увеличения доступной виртуальной памяти. Подходящие команды:sudo fallocate -l 10G /swapfile sudo mkswap /swapfile sudo swapon /swapfile
Создание и активация 10 ГБ файла подкачки может улучшить работу системы, однако помните, что обработка данных в swap будет медленнее по сравнению с RAM.
-
Использование облегченных просмотрщиков изображений:
Например, GwenView, который потребляет меньше ресурсов. Для установки выполните:sudo apt install gwenview
-
Разделение изображения:
Используйте пакетImageMagick
для разделения изображения на части, что снизит требования к памяти при его открытии.sudo apt install imagemagick convert -crop 5x3@ inputfile.tif outputfile%0d.tif
Также убедитесь, что в файле
/etc/ImageMagick-6/policy.xml
установлены адекватные лимиты на размер изображения. -
Программа QGIS для работы с растровыми изображениями:
QGIS может быть успешной альтернативой для открытия больших TIFF-файлов. Он потребляет меньше RAM за счет специфической оптимизации для работы с большими GeoTIFF.Установите QGIS:
sudo apt install qgis
Откройте файл через меню
Layer > Add Layer > Add Raster Layer
. -
Использование веб-решений для визуализации:
Если это возможно, воспользуйтесь онлайн сервисами, как встроенный зум-альбом на сайте, который может загружать и обрабатывать такие большие изображения на серверах, облегчая нагрузку на ваш компьютер.
Заключение
Предлагаемые методы помогут вам открыть и работать с очень большими изображениями на компьютерах с ограниченными ресурсами. Тщательная настройка компьютера для подобных задач может значительно упростить работу. Следите за управлением памятью, особенно если часто работаете с подобными файлами.