Отображение или предварительный просмотр простого текста SVG в консоли Linux

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

Я работаю на удаленной системе (Ubuntu), для которой у меня нет графического дисплея. Я сгенерировал несколько SVG изображений и хочу просмотреть их, чтобы получить общее представление о том, были ли они созданы успешно.

Для этой цели мне интересно, есть ли способ отрендерить SVG в обычный текст, т.е. использовать символы для представления пикселей. Эффект, которого я надеюсь достичь, похож на txtplot в R, как показано здесь: https://github.com/bbnkmp/txtplot

Вот пример вывода txtplot. Это похоже на то, что я хотел бы увидеть с просмотрщиком SVG.



    +----+------------+------------+-----------+------------+--+
120 +                                                     *    +
    |                                                          |
100 +                                                          +
    |                                                     * *  |
 80 +                           *         *                    +
    |                                        *       *    *    |
 60 +                           *              *               +
    |                              *    * *    *       *       |
 40 +                         *      *  * *  *                 +
    |                 *       * *    *  *    * *               |
 20 +         *       *  * *  * *  *                           +
    |            *    *  * *                                   |
    |  *      *    *                                           |
  0 +----+------------+------------+-----------+------------+--+
         5           10           15          20           25   

Предварительная заметка

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


Использование символов для представления пикселей

Основной общий подход: найти что-то, что может читать формат (SVG в вашем случае) и может использовать aalib или libcaca.

Я нашел mpv. Пример:

mpv --pause --vo=caca 'https://upload.wikimedia.org/wikipedia/commons/0/02/SVG_logo.svg'

(Выход через нажатие q.)

Если это не очевидно: чтобы просмотреть локальный файл (локальный относительно того, где работает mpv, в вашем случае это будет файл на удаленной системе), используйте путь к файлу вместо https://….

Это работает, но не сохраняет соотношение сторон. Даже если бы оно и пыталось сохранить соотношение, символьная сетка в вашем локальном консоли не обязательно использует квадраты, и mpv не может знать, насколько сильно она отличается от квадратов.

Вы можете сказать mpv, сколько столбцов и строк он должен использовать. В моей консоли символы в два раза выше, чем шире, так что мне нужно в два раза больше столбцов, чем строк, чтобы получить квадратную картинку. Следующая команда дает мне довольно неплохой предварительный просмотр:

COLUMNS=40 LINES=20 mpv --really-quiet --pause --vo=caca 'https://upload.wikimedia.org/wikipedia/commons/0/02/SVG_logo.svg'

(Мой TERMtmux-256color. В менее способных терминалах результат может быть менее красивым.)

SVG логотип в виде цветного ASCII-арта от libcaca

Для каждого конкретного SVG изображения вам нужно будет настроить значение COLUMNS и LINES, чтобы результат выглядел не искаженным в вашей консоли.

Обратите внимание, что это не “обычный текст”, который вы запрашивали. В зависимости от значения TERM (который должен отражать возможности вашего терминала) mpv будет показывать вам цвета и/или мигающие символы.


Еще лучше

Оказывается, mpv может использовать sixel. Если ваш терминал может их правильно интерпретировать, то используйте это:

mpv --really-quiet --pause --no-osc --osd-level=0 --vo=sixel 'https://upload.wikimedia.org/wikipedia/commons/0/02/SVG_logo.svg'

Вот как выглядит результат в Konsole:

SVG логотип в виде шестиелов, отрендеренный в Konsole

reset может быть полезен для очистки экрана позже (замечание: в некоторых случаях мне нужно было запустить его дважды).

Читать man 1 mpv; существует несколько опций, специфичных для sixel, вы можете найти их полезными.

Ответ или решение

Превью SVG в текстовом режиме Linux

Работа с изображениями в формате SVG без графического интерфейса может показаться сложной задачей. Однако, существуют доступные методы для визуализации таких файлов в текстовом режиме, что позволяет получить представление о созданных графиках или изображениях.

Использование символов для представления пикселей

Основной подход заключается в нахождении программного обеспечения, способного интерпретировать формат SVG и отрисовывать изображения с использованием библиотек, таких как aalib или libcaca. Одним из наиболее простых и доступных инструментов для этой цели является mpv — медиаплеер, который может обрабатывать различные форматы.

Установка mpv

Если mpv не установлен на вашем удаленном сервере Ubuntu, его можно установить с помощью следующей команды:

sudo apt update
sudo apt install mpv
Просмотр SVG с использованием libcaca

Для того чтобы предварительно просмотреть SVG-файл с помощью libcaca, выполните следующую команду в терминале:

mpv --pause --vo=caca 'путь_к_вашему_файлу.svg'

Для работы с удалёнными файлами можно использовать URL-адрес:

mpv --pause --vo=caca 'https://upload.wikimedia.org/wikipedia/commons/0/02/SVG_logo.svg'

Настройка отображения в консоли

Одна из особенностей mpv — возможность настройки соотношения строк и столбцов. Это особенно важно, поскольку символы терминала могут иметь различное соотношение сторон. Для достижения лучшего результата вам может понадобиться настроить размер консоли:

COLUMNS=40 LINES=20 mpv --really-quiet --pause --vo=caca 'путь_к_вашему_файлу.svg'

Здесь COLUMNS и LINES должны быть отрегулированы в зависимости от вашего терминала, чтобы получить несмещенное изображение.

Адаптация для отображения в виде шестиелочников

Кроме того, mpv поддерживает формат sixel, который может обеспечить значительно более качественное отображение графики. Если ваш терминал поддерживает sixel, вы можете использовать следующую команду:

mpv --really-quiet --pause --no-osc --osd-level=0 --vo=sixel 'путь_к_вашему_файлу.svg'

Эта команда позволит вам увидеть цветные изображения без искажений. Различные терминалы могут по-разному обрабатывать sixel, поэтому результаты могут варьироваться. Чтобы очистить экран, можно использовать команду reset.

Заключение

Таким образом, вы можете проделывать легкие визуальные проверки SVG-изображений на системах без графического интерфейса. Использование mpv с поддержкой libcaca и sixel позволяет не только увидеть изображения, но и минимизировать искажения при отображении в текстовом режиме. Следуя предложенным методам, вы сможете лучше контролировать процесс генерации SVG, даже находясь на удаленной системе.

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

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