Цветной след
Дата обновления: 6 августа 2021 года
Это программа, которая преобразует растровые изображения в цветные векторные SVG-изображения. Это инструмент командной строки, реализованный с использованием Python-скриптов и работающий в среде Python3.8+.
На примере открытки изображение в формате PNG (370 КБ):

Преобразование в SVG с одним цветом (32 КБ) даёт следующий результат:

Результат преобразования в SVG с тремя цветами (190 КБ):

Принцип работы программы заключается в следующем:
Для реализации описанных функций необходимо установить следующие программы:
Обратите внимание, что установка pngnq не обязательна. Если вы не используете этот алгоритм, то устанавливать программу не нужно. Кроме того, при установке pngnq на Windows также требуется вручную загрузить файл libpng13.dll, что может быть затруднительно. Поэтому рекомендуется не использовать эту программу.
Установка перечисленных программ означает добавление каталогов исполняемых файлов этих программ в системные переменные среды.
Python-зависимость включает библиотеку lxml. Для установки используйте pip.
Инструмент представляет собой Python-скрипт, расположенный в папке src. Его можно использовать в командной строке следующим образом:
$ python color-trace.py -h
usage: color-trace.py [-h] -i src [src ...] [-o dest] [-d destdir] [-C N]
[--width <dim>] [--height <dim>] [-c N] [-q algorithm]
[-fs | -ri] [-r paletteimg] [-s] [-p size] [-D size]
[-S threshold] [-O tolerance] [-bg] [-v] [--version]
Использование potrace для преобразования растрового изображения в цветное векторное SVG-изображение
optional arguments:
-h, --help, /? показать справку
-i src [src ...], --input src [src ...]
входные файлы, поддерживаются * и ? подстановочные знаки
-o dest, --output dest
путь сохранения результата, поддерживается * подстановочный знак
-d destdir, --directory destdir
каталог сохранения результатов
-C N, --cores N номер процесса для многопоточной обработки (по умолчанию используются все ядра)
--width <dim> ширина выходного SVG-изображения, например: 6.5in, 15cm, 100pt, по умолчанию используется дюйм
--height <dim> высота выходного SVG-изображения, например: 6.5in, 15cm, 100pt, по умолчанию используется дюйм
-c N, --colors N [если не используется -p, необходимо указать этот параметр] количество цветов перед преобразованием. Максимальное значение — 256. 0 означает пропуск уменьшения количества цветов (не рекомендуется использовать 0, если изображение уже уменьшено по количеству цветов).
-q algorithm, --quantization algorithm
алгоритм уменьшения количества цветов: mc, as, или nq. 'mc' (Median-Cut, используется pngquant, создаёт меньше цветов, это значение по умолчанию); 'as' (Adaptive Spatial Subdivision, используется ImageMagick, создаёт меньшее количество цветов); 'nq' (NeuQuant, можно создать больше цветов, используется pnqng). Если --colors 0, уменьшение количества цветов не применяется.
-fs, --floydsteinberg
использовать Floyd-Steinberg dithering (подходит для всех алгоритмов уменьшения количества цветов или -p/--palette). Предупреждение: любой алгоритм уменьшения количества цветов значительно увеличит размер и сложность выходного SVG-изображения
-ri, --riemersma использовать Rimersa dithering (только для алгоритма уменьшения количества цветов as или -p/--palette)
-r paletteimg, --remap paletteimg
использовать пользовательскую палитру для уменьшения количества цветов [заменяет -c и -q]
-s, --stack стековое преобразование (рекомендуется для более точного вывода)
-p size, --prescale size
увеличить изображение перед преобразованием для получения большего количества деталей (значение по умолчанию: 1). Например, использование 2 означает увеличение изображения вдвое перед преобразованием
-D size, --despeckle size
размер сглаживания пятен (в пикселях) (значение по умолчанию: 2)
-S threshold, --smoothcorners threshold
параметр сглаживания углов: 0 означает отсутствие сглаживания, 1.334 — максимальное значение (значение по умолчанию: 1.0)
-O tolerance, --optimizepaths tolerance
параметр оптимизации Bézier-кривых: минимум 0, максимум 5 (значение по умолчанию: 0.2)
-bg, --background сделать первый цвет фоном и максимально оптимизировать окончательное SVG-изображение
-v, --verbose вывести детали выполнения
--version показать версию программы
Например:
$ python color-trace.py -i изображение.png -c 3 -o вектор.svg
$ python color-trace.py -i папка/*.png -c 3 -d папка для сохранения
Этот инструмент изначально был создан для преобразования некоторых отсканированных PDF-книг в формат векторного изображения. Это позволило бы использовать преимущества векторных изображений, такие как меньший размер файла и улучшенное качество при просмотре. В результате поиска было обнаружено, что Potrace, инструмент для преобразования растровых изображений в векторные, имеет отличные результаты. Многие программы и проекты используют его и его код. Единственным недостатком является то, что он поддерживает только чёрно-белые изображения.
Potrace — это инструмент для создания векторных изображений из растровых, то есть для преобразования растровых изображений (PBM, PGM, PPM или BMP) в векторные. Типичным применением является создание SVG или PDF файлов из сканированных данных, таких как корпоративные или университетские логотипы, рукописные заметки и т. д. Полученные изображения являются гладкими и могут быть представлены с любым разрешением.
В настоящее время Potrace может создавать следующие форматы выходных данных: SVG, PDF, EPS, PostScript, DXF, GeoJSON, PGM, Gimppath и XFig.
Затем я также попробовал использовать функции трассировки Adobe Illustrator и Inkscape, но они требовали ручного управления каждым изображением, а не пакетной обработки, как Potrace.
Наконец, я обнаружил Potrace на GitHub, где нашёл репозиторий с несколькими десятками звёзд. Репозиторий использует Python и Potrace для создания интересных проектов. customink реализовал color_trace на Python3.2 в 2012 году!
После прочтения readme я взволнованно скачал исходный код и попытался запустить его, но получил ошибку. В конце концов, он был написан на Python 3.2, что довольно старо, и многие встроенные функции Python сильно изменились.
Если я хотел использовать его, мне пришлось бы исправить его самостоятельно. Я не мог смотреть на исходный код на английском языке, поэтому заменил большинство комментариев и переменных на удобные для понимания переводы на китайский язык. Только так я постепенно понял принцип работы программы, а затем провёл тестирование, исправление и оптимизацию, пока она не стала пригодной для использования. Счастлив!
Поскольку эта программа была создана в первую очередь для моего личного использования, я не рассматривал интернационализацию, и большинство переменных были на китайском языке. Даже справка командной строки была сделана на китайском. Для удобства чтения и обслуживания при внесении вклада в код рекомендуется использовать китайский язык в качестве предпочтительного языка для переменных и комментариев.
При написании комментариев я медленно печатал по-китайски, и многие части я делал с помощью HaujetZhao/CapsWriter, чтобы помочь с голосовым вводом. Рекомендую использовать.
Любой способный энтузиаст может разветвить этот репозиторий и перевести его на английский код.
Любовь всегда остаётся любовью, независимо от того, сколько вы даёте. Это программное обеспечение полностью с открытым исходным кодом, оно работает на любви. Если вы хотите, вы можете поддержать меня, сделав пожертвование:
Этот QR-код для пожертвований также был преобразован из JPG в чёрно-белый SVG-файл размером всего 55 КБ, отлично!
Для обратной связи по программному обеспечению можно создавать проблемы или присоединяться к QQ-группе: 1146626791.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )