SVG в черно-белом - PullRequest
       18

SVG в черно-белом

2 голосов
/ 05 февраля 2010

Я хотел бы иметь возможность конвертировать документы SVG в черно-белые. Моя попытка следующий скрипт Makefile с использованием 'sed':

%.bw.svg: %.svg
    sed '/stroke:none/!s/stroke:[^;\"]*/stroke:black/g' $< > $@

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

Интересно, было бы слишком сложно сделать что-то подобное лучше, возможно, используя XSLT, но у меня нет опыта. Кто-нибудь может помочь?

Ответы [ 4 ]

3 голосов
/ 05 февраля 2010

Два варианта, которые я бы попробовал:

1 - Inkscape, кажется, может это сделать - Inkscape Convert
2. SVG поддерживает атрибут ColorProfile в элементе SVG, который может ссылаться на цветовой профиль ICC. Я бы попытался сослаться на цветовой профиль GrayScale и посмотреть, что произойдет. Похоже, есть один доступный здесь .

0 голосов
/ 16 апреля 2010

Прежде всего: не пытайтесь делать это с sed. Редактирование XML немного сложнее, чем это.

Вы можете использовать SVG эффект фильтра на изображении. Примитив фильтра ColorMatrix может обесцветить изображение.

0 голосов
/ 05 февраля 2010

Я думаю, что вам нужен полный синтаксический анализатор CSS, чтобы выполнить эту работу для всех SVG; но для «SVG, сгенерированного некоторым конкретным приложением векторного редактирования», XSLT, содержащий строковое редактирование атрибутов стиля (как вы делаете сейчас, за исключением того, что он будет правильно придерживаться стилей и избегать, например, ), может быть адекватным.

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

0 голосов
/ 05 февраля 2010

Моя первая мысль - опасно манипулировать XML (в данном случае SVG) с помощью sed и т. Д., Поскольку он не будет корректно избегать символов XML или соблюдать кодировки символов.

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

Учитывая решения XPath (в том числе XSLT), звучит хорошо, поскольку вы сможете точно определить компоненты, которые вы хотите изменить. Некоторая реализация XQuery может быть полезна здесь.

Совершенно другой альтернативой является XMLStarlet - набор инструментов командной строки, используемый для обработки XML в сценариях.

Наконец, вы можете использовать программный набор инструментов для этого? Батик будет моим первым выбором (в мире Java).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...