SVG转换为黑白图像

4

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

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

这适用于线等,但不适用于填充。基本上,如果描边不是透明的(none),那么我会将其转换为黑色。如果填充不是白色或透明的,我也想将其转换为黑色。

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


你的SVG文件中会嵌入二进制图像吗? - Jacob G
我甚至不知道你可以用SVG做到那个 :-) - Giovanni Funchal
4个回答

5

我会尝试两种方法:

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


不错的发现。我认为Inkscape在幕后调用Python来完成工作。我想知道是否也有它的黑白版本。 - Giovanni Funchal

0

我的第一反应是,通过sed等方式操纵XML(在本例中为SVG)可能会很危险,因为它不会正确转义XML字符或遵守字符编码。

话虽如此,您的数据集可能受到足够的限制和限制,以使这不成为特别问题。

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

一个非常不同的选择是XMLStarlet - 用于处理脚本中的XML的命令行工具集。

最后,您可以使用编程工具集来完成此操作吗?在Java世界中,Batik将是我的首选。


我在想一个简单的东西...这不可以用10行代码完成吗? - Giovanni Funchal
我对该问题领域不够熟悉,无法给出那种指示。 - Brian Agnew

0

我认为你需要一个完整的CSS解析器来处理所有SVG;但是对于“某些特定矢量编辑应用程序生成的SVG”,包含样式属性字符串编辑的XSLT(与您现在正在进行的方式相同,除了它将正确坚持样式并避免例如<text>)可能足够。

如果您编辑您的问题以解释填充颜色的策略如何失败,那将会很有用。


0
首先:不要尝试使用 sed 进行这项操作。编辑 XML 比那复杂得多。
您可以在图像上使用 SVG 滤镜效果。ColorMatrix 滤镜原语可使图片去色。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接