如何在Linux命令行中将SVG文件纵向连接?

4
我有一系列的正方形 SVG 文件,想要将它们竖直拼接成一个超长的 SVG 文件。我尝试使用 imagemagick 进行合并,根据这个页面:http://linux.about.com/library/cmd/blcmdl1_ImageMagick.htm 和这个页面:http://www.imagemagick.org/Usage/compose/。我试了这个命令:composite 'file1.svg' 'file2.svg' +adjoin 'outputfile.svg',但是却收到了以下错误信息:composite: unrecognized option '+adjoin' @ error/composite.c/CompositeImageCommand/565. 我也试了一些其他的 imagemagick 命令(如 convert、display),但是没有成功。请问如何在命令行上合并这些文件?是否有 Inkscape 命令可以实现此功能?

嗯,我认为这可能是不可能的,因为在这里讨论的ID冲突问题:http://inkscape-forum.andreas-s.net/topic/129319 - Mittenchops
不是不可能,但连接程序需要跟踪ID,并在必要时生成新的ID。 - Erik Dahlström
公正的观点,Erik。不过我猜想,如果这对inkscape团队来说太复杂了,那么要完成这项任务所需的工作量可能比我愿意投入的还要多。=) - Mittenchops
相关问题:http://stackoverflow.com/questions/6668616/svgexception-on-merge-svgs-in-a-new-one - halfer
2个回答

6
目前没有仅通过命令行而无需自定义脚本方便地完成此操作的方法。最接近预先编写的东西是https://github.com/astraw/svg_stack,它可以让您编写以下形式的命令: svg_stack.py --direction=h --margin=100 red_ball.svg blue_triangle.svg > shapes.svg 以连接。

现在您也可以使用 pip3 install svg-stack 进行安装。不幸的是,它似乎无法将不同大小的图像调整为单一大小,它们仍然保持不同的大小。 - Ciro Santilli OurBigBook.com

1

如果你愿意使用脚本语言,这应该很容易。对于每个文件,只需添加一个前缀到所有的ID标签;所以在文件1中,id="circle"就会变成id="file1_circle",在文件2中,id="circle"则变成了id="file2_circle"

在大多数情况下,您可以轻松地进行简单的搜索和替换(查找id="并用id="fileX_替换它),虽然在某些情况下可能无法正常工作(特别是如果该查找字符串出现在文本项中)。

如果您想以“正确的方式”进行此操作,您需要一个XML解析器(例如PHP中的XMLReader)。


每个SVG文件的顶部都有混乱的元数据要处理,不是吗?文档类型声明和其他内容?我的意思是,难道没有一种通用的方法可以在不打开文件的情况下完成这项工作吗? - Mittenchops
是的,虽然删除其中一个 <?xml ?> 声明和开头的 svg 标签是一件微不足道的事情。但这是一个好观点 - 如果第二个文档要出现在第一个文档的边界框之外,那么 svg 标签中的 widthheight 元素可能需要重新编写。 - halfer

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