SVG到黑白

时间:2010-02-04 21:07:49

标签: python xslt sed awk svg

我希望能够将SVG文档转换为黑白文档。我的尝试是使用'sed'的以下Makefile脚本:

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

这适用于线等,但不适用于填充物。基本上如果笔划不可见(无),那么我将其转换为黑色。我想对填充物做同样的事情,如果不是白色或不可见,则转换为黑色。

我想知道以更好的方式做这样的事情是否太复杂,也许使用XSLT,但我没有经验。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:3)

我会尝试两种选择:

1- Inkscape似乎能够做到 - Inkscape Convert
2- SVG支持SVG元素上的ColorProfile属性,该属性可以引用ICC颜色配置文件。我会尝试在那里引用GrayScale颜色配置文件,看看会发生什么。看起来有一个here

答案 1 :(得分:0)

我的第一个想法是,通过sed等操作XML(在本例中为SVG)可能很危险,因为它不会正确地转义XML字符或尊重字符编码。

话虽如此,您的数据集可能会受到足够的约束和限制,因此这不是一个特定的问题。

考虑到XPath解决方案(包括XSLT)听起来不错,因为您将能够精确识别要更改的组件。 XQuery的某些实现可能在这里有用。

一个非常不同的替代方法是XMLStarlet - 一个用于在脚本中处理XML的命令行工具集。

最后,您可以使用程序化工具集来执行此操作吗? Batik将是我的第一选择(在Java世界中)。

答案 2 :(得分:0)

我认为你需要一个完整的CSS解析器来完成所有SVG的工作;但是对于“由某些特定的矢量编辑应用程序生成的SVG”,包含样式属性的字符串编辑的XSLT(正如您现在所做的那样,除了它将正确地粘贴到样式并避免例如&lt; text&gt;)可能就足够了

如果你编辑你的问题来解释你的策略如何填补填充颜色会很有用。

答案 3 :(得分:0)

首先:不要尝试使用sed执行此操作。编辑XML比这复杂一点。

您可以在图片上使用SVG filter effect。 ColorMatrix过滤器基元可以使图像去饱和。

相关问题