Заметки на полях 02.06.2026
Периодически возникает задача: взять SVG-картинку и быстро превратить её в PNG. Слайд для доклада, превьюшка для канала, картинка для статьи на Habr или в блог – везде PNG ожидается, а исходник у меня в SVG. Открывать ради этого GIMP или Krita – тяжело, гонять через онлайн-конвертеры – неудобно и приватно сомнительно.
Решение лежит в одной утилите – rsvg-convert из пакета librsvg. На macOS ставится одной строкой:
brew install librsvg
Дальше можно дергать её напрямую, но я не люблю каждый раз вспоминать флаги. Поэтому завернул в крошечный скрипт svg2png и положил в ~/.local/bin/:
#!/usr/bin/env bash
set -eou pipefail
if [[ $# -lt 1 ]]; then echo "Usage: $(basename "$0") [width]" >&2 exit 1 fi
f="$1" width="${2:-1024}"
if [[ ! -f "$f" ]]; then echo "File not found: $f" >&2 exit 1 fi
rsvg-convert -w "$width" "$f" -o "${f%.svg}.png"
Логика простая до неприличия:
- первым аргументом – путь к SVG;
- вторым (опционально) – ширина в пикселях, по умолчанию 1024;
- на выходе рядом с исходником появляется .png с тем же именем.
Использование:
svg2png diagram.svg # diagram.png шириной 1024px svg2png diagram.svg 2048 # diagram.png шириной 2048px
set -eou pipefail гарантирует, что при ошибке скрипт честно упадет, а не сделает вид, что всё хорошо. Проверки на наличие аргумента и существование файла – чтобы не получить невнятный stderr от rsvg-convert, а сразу понятное сообщение.
Из приятных мелочей: высоту указывать не надо, rsvg-convert сохранит пропорции из исходного SVG. Если вдруг понадобится конкретный размер по обеим осям – добавляется флаг -h, но мне за все время ни разу не потребовалось.
А ты чем конвертируешь SVG в PNG? Делись в комментариях своими однострочниками.