Заметки на полях 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? Делись в комментариях своими однострочниками.

#заметкинаполях