Как просматривать ОЧЕНЬ большие изображения?

Вопрос или проблема

У меня есть 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.

Возможные решения

  1. Увеличение объема файла подкачки:
    Создание дополнительного swap-файла — рациональный шаг для временного увеличения доступной виртуальной памяти. Подходящие команды:

    sudo fallocate -l 10G /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile

    Создание и активация 10 ГБ файла подкачки может улучшить работу системы, однако помните, что обработка данных в swap будет медленнее по сравнению с RAM.

  2. Использование облегченных просмотрщиков изображений:
    Например, GwenView, который потребляет меньше ресурсов. Для установки выполните:

    sudo apt install gwenview
  3. Разделение изображения:
    Используйте пакет ImageMagick для разделения изображения на части, что снизит требования к памяти при его открытии.

    sudo apt install imagemagick
    convert -crop 5x3@ inputfile.tif outputfile%0d.tif

    Также убедитесь, что в файле /etc/ImageMagick-6/policy.xml установлены адекватные лимиты на размер изображения.

  4. Программа QGIS для работы с растровыми изображениями:
    QGIS может быть успешной альтернативой для открытия больших TIFF-файлов. Он потребляет меньше RAM за счет специфической оптимизации для работы с большими GeoTIFF.

    Установите QGIS:

    sudo apt install qgis

    Откройте файл через меню Layer > Add Layer > Add Raster Layer.

  5. Использование веб-решений для визуализации:
    Если это возможно, воспользуйтесь онлайн сервисами, как встроенный зум-альбом на сайте, который может загружать и обрабатывать такие большие изображения на серверах, облегчая нагрузку на ваш компьютер.

Заключение

Предлагаемые методы помогут вам открыть и работать с очень большими изображениями на компьютерах с ограниченными ресурсами. Тщательная настройка компьютера для подобных задач может значительно упростить работу. Следите за управлением памятью, особенно если часто работаете с подобными файлами.

Оцените материал
Добавить комментарий

Капча загружается...