Векторизация и растрирование в Inkscape

Юрий Апостол подготовил для нас статью, посвящённую векторизации и растрированию в Inkscape. В ней подробно рассмотрено использование инструмента векторной заливки и автоматической векторизации.

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

Конечно, не любой растр целесообразно преобразовывать в вектор. Например, фотография с большим количеством цветов и мелких деталей после векторизации потеряет фотореалистичность. Но логотипы, графики, схемы, разнообразные иллюстрации, выполненные простыми линиями и плоскими цветами, однозначно выиграют от преобразования в векторную форму.

Ручная векторизация при определённых навыках может дать гораздо лучшие результаты, чем автоматическая. Но и автоматизированные программные средства развиваются, позволяя всё точнее и качественнее преобразовывать изображения.

Inkscape идеально подходит для ручной векторизации в режиме рисования поверх растра. Имеется в нём и встроенный инструмент для автоматической векторизации, основанный на утилите Potrace.

Кроме того, в программе реализована несколько необычная для векторных редакторов возможность заливки вектором растровых областей — как по цвету в определённой точке, так и по прозрачности.

В этом уроке мы ознакомимся со всеми имеющимися методами векторизации, со средствами растеризации — преобразования вектора в растр, и рассмотрим способы внедрения растровых изображений в векторный документ.

С последнего, пожалуй, и начнём, так как без добавления картинки в документ нам нечего будет и векторизировать.

Растровые изображения и вектор

Напомню, что в качестве основного векторного формата в Inkscape используется SVG — язык разметки масштабируемой векторной графики, основанный на расширяемом языке разметки XML. Именно форматом обусловлены некоторые особенности взаимодействия с внешними файлами, коими являются вставляемые растровые изображения. Но об этом ниже.

Вероятно, наиболее естественным и простым способом добавления изображений на холст является перетаскивание мышкой файлов из файлового менеджера или окна браузера прямо в рабочую область Inkscape. Так же просто работает и вставка графических данных из буфера обмена (Ctrl+V или «Правка → Вставить» из основного меню, «Вставить» из контекстного меню).

Предварительно поместить данные в буфер обмена можно из любого растрового редактора или того же браузера, если в нём предусмотрена такая возможность.

Имеется в Inkscape и специально предусмотренный механизм для импорта файлов. Достаточно вызывать диалог импорта из меню «Файл → Импортировать…» (или Ctrl+I) и выбрать нужное изображение.

Выбор файлов для импорта

Добавленные на холст растровые изображения являются такими же графическими объектами как и все остальные. Их можно перемещать, масштабировать, вращать, в общем, применять к ним любые трансформации, накладывать маски и фильтры, составлять из них текстуры.

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

Следовательно, картинку не только не стоит трансформировать, но и необходимо убедиться, чтоб после добавления на холст её координаты в пикселах были целыми числами. Если это не так — достаточно через панель свойств объекта установить дробные части координат в ноль.

Для выравнивания по пиксельной сетке можно воспользоваться и специальным расширением, которое размещено в меню «Расширения → Изменение контура → Выровнять по пиксельной сетке…» (Shift+X). Оно хитрым образом перемещает объекты, может незначительно изменять их размеры и толщины линий, лишь бы попасть в сетку. Но так как результат работы расширения бывает непредсказуемым, я бы не рекомендовал его использовать.

На приведённом ниже примере растровое изображение с надписью «.svg» трижды вставлено в документ. Пиксельная сетка верхнего экземпляра не совпадает с сеткой документа: из-за смещения на полпиксела влево и вверх надпись выглядит размытой.

Координаты средней картинки вручную округлены до целых значений, пиксельные сетки картинки и документа полностью совпадают, надпись такая же чёткая, как была в исходном растровом изображении. Нижняя же картинка была вставлена со смещением и выровнена инструментом выравнивания. Тот при округлении допустил смещение, измеряемое тысячными долями пиксела, поэтому проявилось лёгкое размывание.

Размытость из-за непопадания в пиксельную сетку

Необходимо также учитывать, что у программы сейчас некоторые проблемы с переводом пикселов в физические меры длины и обратно. Связано это с неизменяемым количеством точек на линейный дюйм. Какое бы разрешение для экспорта вы не выставили в настройках, при преобразовании дюймов, сантиметров и прочих в пикселы применяется 90 dpi.

Указанное разрешение влияет лишь на экспорт. Если работать только с пикселами, это, конечно, не важно. Но при подготовке к печати полиграфической продукции возникнут неудобства в виде некорректных значений величин на линейках, в панелях свойств и инструментах трансформации. На самой картинке это никак не отразится.

Выбор способа вставки изображения

И ещё один важный момент, о котором необходимо знать для эффективной работы с программой. Хотя с версии Inkscape 0.48 у нас уже спрашивают при импорте, что делать с добавляемым графическим файлом, раньше вставка изображения без всяких вопросов приводила лишь к его привязке к векторному документу. Это как раз одна из особенностей XML.

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

Свойства изображения

Или в редакторе XML, который вызывается по Shift+Ctrl+X или из меню «Правка → Редактор XML».

Редактор XML

От проблем с прилинкованными файлами можно избавиться, выполнив встраивание растровых изображений в документ (меню «Расширения → Изображения → Встроить все растровые изображения…»). Либо нужно соглашаться со встраиванием сразу, при импорте. Но следует учитывать, что объём графических данных увеличится приблизительно на треть, так как для встраивания используется схема «data: URI» с избыточным методом кодирования base64. Проще говоря, картинки преобразовываются в набор текстовых символов и вставляются в XML-документ вместо ссылок.

Если при вставке изображения файла не существует, а так происходит, когда данные вставлены из буфера обмена, он предварительно создаётся. Сейчас при этом и встраивание даже не предлагается. Но, возможно, это исправят в последующих версиях программы.

Да, на приведенных выше скриншотах можно заметить, что и в редакторе XML, и в окне свойств изображения, некоторые координаты не являются целыми числами. Более того, они отличаются от реальных, отображаемых в панели свойств объекта. Так может происходить по двум причинам.

Во-первых, из-за того, что в SVG координата Y отсчитывается от верхнего края документа, а в Inkscape — от нижнего (в версии 0.49 это планируется исправить — прим. ред.). В преобразовании между системами координат как одно из слагаемых участвует высота документа. А в нашем случае она не равна целому числу пикселов, так как задана в миллиметрах (формат А4).

Во-вторых, реальные координаты будут отличаться от указанных в свойствах, когда объект находится в группе или слое с отличным от нуля смещением. На это не стоит обращать внимание. В панели свойств отображаются правильные значения. Там же их и изменять нужно.

Автоматическая векторизация

Для автоматической векторизации вставленного в документ растрового изображения, выделяем его и вызываем специальное диалоговое окно из меню «Контур → Векторизовать растр…» (Shift+Alt+B).

Режимы векторизации

Интерфейс инструмента векторизации при первом знакомстве может привести к замешательству, поэтому перед началом работы с ним не лишним будет немного поиграть с доступными режимами и параметрами.

Параметры векторизации

Режимы разбиты на две группы. Первая — одиночное сканирование. В ней находятся режимы, формирующие один контур, который соответствует исходному растровому изображению. Вторая — множественное сканирование. Здесь создаются группы контуров (цветовые градации).

Три параметра, влияющие на результирующий контур, по каким-то причинам вынесены на отдельную вкладку, остальные же перемешаны с режимами. Часть параметров влияет лишь на ту группу режимов, в которой они расположены, но некоторые применимы и к определённым режимам из другой группы. Например, инвертирование изображения может применяться в режиме «Шаги яркости», но не применяется в остальных режимах множественного сканирования.

Кроме того, к «Шагам яркости» не применяется сглаживание, хотя оно расположено в группе множественного сканирования.

В простых случаях (один или несколько плоских цветов, чёткие формы и отсутствие шума на изображении), картинка векторизуется достаточно качественно. Мне захотелось посмотреть как поведёт себя инструмент в более сложной ситуации. Я капнул тушью на лист бумаги, чтоб образовались брызги, и отсканировал кляксу.

Отсканированная чернильная капля

После переноса растровой картинки на холст, я попытался добиться максимально приемлемых результатов во всех режимах, подбирая параметры векторизации. Параметры обработки контура оставались неизменными: удаление пятен, размерами 2 и меньше, порог сглаживания углов — 1, сглаживание контуров — 0,2. Выделение переднего плана при помощи SIOX не использовал (это, по сути, простое накладывание маски на исходный растр).

Вот, что у меня получилось:

Результаты векторизации

Режим сокращения яркости (1) отработал на «отлично». Порог яркости для перехода из белого в чёрный был установлен в 0,8. Остальные параметры на вкладке с режимами на результат не влияют (кроме инвертирования). Именно этим режимом я пользуюсь чаще всего — он идеально подходит для оконтуривания простых однотонных логотипов и рукописных надписей, для выделения очертаний предметов с фотографий или отсканированных документов.

Хорошо отработал и режим определения краёв (2). Порог яркости смежных пикселов для определения ширины края, был установлен в 1. Этот режим может быть полезен для имитации контурного рисунка.

В режиме квантования цветов (3) основной параметр — количество сокращённых цветов. По переходам между цветами и строится контур. Если в растре у вас линейный градиент, то в векторе получите полосы, перпендикулярные направлению градиента. Я даже не знаю, для каких целей такой режим векторизации может понадобиться.

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

Для режимов «Шаги яркости» (4), «В цвете» (5) и «В градациях серого» (6) было выставлено количество сканирований — 5. Было выключено сглаживание растра перед векторизацией, включено складывание слоёв в стопку (иначе складываются встык и могут возникнуть видимые щели между контурами), включено удаление фона. Режимы подходят для векторизации многоцветных изображений, но полноцветные лучше оставлять в растре или отрисовывать вектором вручную, со всеми необходимыми градиентами и фильтрами.

Ручная векторизация

В тех случаях, когда необходимо оконтурить растровое изображение плохого качества и при этом к векторной форме предъявляются повышенные требования, нас вряд ли устроит результат автоматической векторизации.

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

Ведь даже такой простой зонтик, как этот:

Отсканированный знак «Не мочить»

При автоматической трассировке, в лучшем случае, выглядит так:

Результат автоматической векторизации

Можно упрощать контуры («Контур → Упростить», Ctrl+L), но тогда возникают искажения. Можно вручную удалять лишние узлы и выпрямлять неровности, но какой тогда смысл в автоматике? Единственно верное решение в данном случае — обвести контур руками с использованием минимального количества узлов. Выбираем инструмент для рисования кривых Безье и прямых линий, строим ломаную с узлами в точках излома и перегиба, выгибаем отрезки инструментом редактирования контура так, чтоб ложились точно по фигуре.

Ручная трассировка кривыми Безье

Хотя, по возможности, лучше составлять фигуры из графических примитивов: эллипсов, прямоугольников и т.д. Например, купол нашего зонтика можно собрать из четырёх эллипсов, а ручку — выгнув одну кривую с толстой обводкой и закруглёнными концами.

Составление векторной фигуры графическими примитивами

Не буду сейчас вдаваться в подробности, как склеивать и объединять контуры. Это тема отдельного урока. Но результат выглядит так:

Результат ручной векторизации

Заливка вектором

Специально для векторизации и раскрашивания отсканированных комиксов в Inkscape был добавлен инструмент, который называется «Сплошная заливка» (так написано в настройках) или «Заливать замкнутые области» (а так — во всплывающей подсказке на панели инструментов). Хотя лично я бы назвал его «Заливка по цвету» или «…по образцу», так как для заливки указывается точка, на холсте от которой и по степени схожести на которую необходимо залить всё вокруг.

Инструменту всё равно, что лежит на холсте. Это может быть как растровая картинка, так и векторные объекты. Или их комбинации. Заливка производится замкнутыми векторными контурами по растровому представлению всех объектов документа.

Для демонстрации работы заливки я взял небольшой фрагмент отсканированного рисунка своей жены.

Отсканированный акварельный рисунок

Рисунок выполнен по тиснённой акварельной бумаге типа «яичная скорлупа» и выглядит весьма шероховато. Да ещё и заливки неоднородные: присутствуют лёгкие градиенты.

Автоматическая векторизация в таких случаях выдаёт вовсе не тот результат, который хотелось бы получить. Ручная тоже не подходит — чтобы векторный рисунок выглядел так же живо, как и нарисованный от руки по бумаге, придётся приложить неимоверные усилия.

Итак, мы решаемся заливать вектором наше растровое изображение по цветовым пятнам.

Для быстрого выбора инструмента заливки используется клавиша U. Но ознакомимся для начала с его параметрами.

Параметры заливки

Из раскрывающегося списка на панели настроек инструмента, подписанного как «Чем залить», выбирается характеристика цвета или прозрачности по которой будут сравниваться точки изображения. Рядом указывается порог сравнения, выраженный в процентах. Чем больше его значение, тем более непохожие точки будут захватываться для заливки вокруг точки-образца.

Следующий параметр указывает, насколько нужно увеличить или уменьшить заливающий контур после определения его границ. Увеличение полезно в тех случаях, когда при заливке образуются щели между цветами. Параметр «Закрывать интервалы» позволит ограничить «протекание» заливки через разрывы определённых размеров.

Ещё правее находится кнопка сброса параметров до заданных по умолчанию, а с самого края — образец текущего стиля заливки и обводки. При нажатии на него можно попасть в настройки параметров по умолчанию.

Непосредственно перед заливкой определённой области имеет смысл сначала выбрать цвет будущего контура — назначить стиль инструмента заливки. Удобнее всего брать его пипеткой прямо с того места, которое будем заливать.

Быстрое переключение на пипетку осуществляется нажатием D на клавиатуре. Для усреднения цвета достаточно слегка протянуть пипеткой по холсту. Область усреднения при этом будет очерчена окружностью.

Выбор цвета заливки

Но перед выбором цвета пипеткой необходимо убедиться, что не выделено никакого объекта, который может быть перекрашен. Снимите выделение через меню «Правка → Снять выделение» (клавиатурная комбинация отсутствует) или переключитесь на указатель (S на клавиатуре) и щёлкните где-нибудь по пустой области холста или по растру.

Заливать области одного цвета лучше одним цельным контуром, а не множеством отдельных. Суммирование контуров при заливке осуществляется удерживанием клавиши Shift. Кроме уменьшения количества объектов это позволит продолжить наращивание выделенной области после каких-нибудь других действий без повторного выбора цвета пипеткой.

Заливка вектором замкнутой области

Следует помнить, что увеличение масштаба просмотра, а это иногда хочется сделать для попадания заливкой в тонкую линию, приведёт к увеличению детализации (не путать с порогом сравнения точек). При этом результирующий контур будет менее гладким и в худшем случае пройдёт по границам пикселов, образовав «лесенку». Поэтому правильнее будет сканировать изображения с более высоким разрешением и выполнять заливку на масштабе 1:1. Для попадания в тонкую линию, выполненную ручкой или пером, вполне достаточно 300 dpi.

Результат моей работы выглядит так:

Векторизованный методом заливки рисунок

Есть ещё несколько приёмов, которые могут быть полезны при заливке. Протягивание мышью с зажатой левой клавишей позволяет заливать градиенты и области, содержащие разрывы. Фактически, этим осуществляется заливка вдоль пройденного пути, а не вокруг одной точки.

Протягивание с зажатой кнопкой мыши и клавишей Alt будет заливать вдоль пройденного пути только области, удовлетворяющие сравнение с начальной точкой. Ctrl+щелчок мышью по любому контуру и Shift+Ctrl+щелчок заливают его выбранным стилем заливки или обводки. При этом контур не должен быть выделен.

Растеризация

Процесс, обратный векторизации — растеризация или растрирование. Он осуществляется каждый раз, когда векторное изображение или текст нужно вывести на экран. Осуществляется он и при экспорте вектора в графический файл растрового формата. Диалог экспорта вызывается из меню «Файл → Экспортировать в растр…» (Shift+Ctrl+E).

Диалог экспорта в растр

Это достаточно гибкий инструмент, он позволяет указать как произвольную область экспорта, так и область, ограниченную страницей документа, выделением или всеми графическими объектами. Можно указать размер или разрешение итогового изображения (значение по умолчанию берётся из настроек). Если выбрано несколько объектов, их можно по отдельности пакетно экспортировать. Кроме того, есть возможность экспортировать не всю видимую в границах выделения область, а только те объекты, которые выделены.

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

В меню «Правка → Сделать растровую копию» (Alt+B) есть ещё один инструмент растеризации. Он, по сути, создаёт растровый клон выделенного объекта. Начиная с версии Inkscape 0.48 это будет встроенное изображение. В более ранних — связанный файл.

Вот, собственно, и всё, что я хотел рассказать о растрово-векторных преобразованиях. С удовольствием отвечу на вопросы.


Автор: Юрий Апостол

3 Comments

  1. О том как подвязывать или внедрять внешний растровый файл из статьи вполне понятно. А что делать, если нужно таким же образом в исходном inkscape-файл создать область, в которой будет отображаться «подвязанный» внешний векторный файл, скажем, из викихранилища где адреса относительно постоянные? Конечно можно просто внедрить внешний файл скопировав и вставив целиком, но хотелось бы это сделать изящнее. Подскажите пожалуйста возможно ли это, и если возможно, то как.

      • Спасибо за ссылку, пробовал вставить через ничего не вышло — может оно и работает для вставки .svg в .html, не знаю. Поигрался и нашёл способ вставки .svg в .svg. Взял левый растр и привязал его в своём .svg как описано выше. Потом вручную отредактировал сам .svg в текстовом редакторе — в разделе изменил ссылку к растру на ссылку на свой файл в викихранилище xlink:href=»http://upload.wikimedia.org/wikipedia/commons/d/d3/Herald_of_NTUU_KPI_logo.svg». Таким вот неестественным способом получилось — он масштабируется вместе с основным файлом.

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*