RasterTracer: логотип из JPG в вектор на своём компьютере

Кейс: RasterTracer, программа для трассировки растра в SVG

В работе веб-студии это случается постоянно: клиент присылает логотип «только в JPG», с крапом от сжатия, а для сайта, печати или плоттера нужен вектор. Онлайн-сервисы просят загрузить файл к себе и ограничивают число попыток, графические пакеты стоят дорого и трассируют вслепую. Мы написали свою программу: RasterTracer. Она переводит логотипы, сканы, печати, рисунки и фотографии в SVG на компьютере и показывает результат рядом с оригиналом.

Что умеет

  • Три режима трассировки. Чёрно-белый для логотипов, штриховых рисунков, печатей и сканов. Цветной для иллюстраций и фотографий. Цветной HQ сокращает палитру и трассирует каждый цвет отдельно: считается дольше, контуры чище.
  • Сравнение с оригиналом. Шторка с перетаскиваемой границей, показ рядом или по отдельности. Масштаб и положение у обеих половин общие.
  • Маска бинаризации. Показывает ровно то изображение, которое получает движок в чёрно-белом режиме: видно, где остался мусор и где пропали тонкие линии.
  • Предпросмотр при настройке. Пересчитывается после каждого изменения параметров на уменьшенной копии; экспорт идёт в полном разрешении.
  • Пресеты. Семь встроенных наборов: логотип, скан документа, скетч, штамп, плоские заливки, иллюстрация, фотография. Свои наборы сохраняются и переживают обновление.
  • Экспорт. SVG в файл или текстом в буфер обмена для вставки в графический редактор.

Два движка, потому что задачи разные

Движок potrace строит эталонные кривые Безье, но принимает только двухцветное изображение. Поэтому качество чёрно-белого режима определяет подготовка: шумоподавление, выравнивание фона, обычный или адаптивный порог. Движок VTracer принимает цвет и сам раскладывает картинку на области. Третий режим соединяет оба подхода: палитра сокращается до заданного числа цветов, и каждый цвет трассируется potrace отдельным слоем.

Ядро трассировки отделено от интерфейса и не знает ни о Qt, ни о файловых диалогах. Это проверяет автоматический тест, а не договорённость. Каждый параметр описан в одном месте с диапазоном, подписью и подсказкой; ползунки интерфейса и ключи командной строки строятся из этого описания. Всего в проекте 223 автоматических теста.

Предпросмотр, который не врёт

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

Самое трудное: обновление поверх работающей программы

Штатный способ установщика закрыть приложение с однофайловой сборкой не сработал: программа выходила, а её загрузчик оставался висеть и держал файл. Решение: именованное событие Windows. Программа его слушает, установщик взводит, и все открытые окна закрываются обычным порядком за пару секунд. Загруженный установщик запускается только после сверки размера и SHA-256 с манифестом на сайте.

Как устроена

Python, PySide6 (Qt), potrace и VTracer, OpenCV для подготовки изображения. Потому что potrace распространяется под GPLv2, он запускается отдельным процессом, а не встраивается как библиотека. Python и библиотеки входят в дистрибутив, на компьютере ничего дополнительно не требуется. Изображения в сеть не передаются.

Ограничения

Формат результата один: SVG. Трассировки по осевой линии нет: линии превращаются в залитые контуры. Фотография в векторе выглядит как постер из цветных областей. Интерфейс только на русском. Всё это написано на странице программы.

Где взять

Бесплатно для личного некоммерческого использования. Windows 10 и 11, установка в профиль пользователя без прав администратора, есть версия без установки одним файлом. Страница программы, руководство и контрольные суммы: apps.scrumweb.ru/rastertracer.

Нужен инструмент под вашу задачу?

RasterTracer родился из рутины веб-студии и закрыл её. Если в вашей работе есть задача, которую хочется автоматизировать своей программой, напишите нам.

Есть вопросы?

Можете обращаться по телефону +7 (911) 5-0000-45 по будням с 09:00 до 20:00.

Мы используем cookies вашего браузера, а так же обрабатываем ваши персональные данные при отправке заявки с сайта.
Если Вы продолжите использовать сайт, мы будем считать что Вас это устраивает.

X