Вопрос или проблема
Я работаю на удаленной системе (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'
(Мой TERM
— tmux-256color
. В менее способных терминалах результат может быть менее красивым.)
Для каждого конкретного 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:
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, даже находясь на удаленной системе.