14

我有一个程序可以批量生成多个 SVG 文件,然后我需要能够将它们组合(平铺)到一个文件中,并设置一个空白区域,并以厘米(或毫米)为单位设置宽度。

我需要一个现有的脚本或一个指向我可以用来完成此任务的库和语言的指针。有什么建议从哪里开始?

4

4 回答 4

9

这里有一些工具可以帮助您从svg文件创建SVG精灵表:

SVG 堆栈

SVG 实用程序

然后你可以用一个工具清理你的svg

冲刷

于 2013-11-05T16:32:29.023 回答
2

是的,正如@victor-henriquez指出的那样,您可以使用montage它,但它有点棘手,我通过激活-verbose输出进入它,并看到它创建了一个inkscape命令并分析它为我解决了这个问题。

montage -version
# Version: ImageMagick 7.0.7-31 Q16 x86_64 20180506

我想要……</p>

  • ...标记桌面图标:使用-labeland -pointsize(通过 pointsize 获得正确的字体大小但取决于密度)
  • …增加-density(很难找到适合输出的数字)
  • ... 有序地堆叠和平铺:使用-tile 15x30(此处为 15 列 x 30 行)
  • ...在每个子图像上添加边距:使用-geometry '+40+0'(水平添加 40 像素,垂直添加 0 像素)

生成的命令是(添加-verbose以获取详细的处理信息):

montage -label '%f' -pointsize 2 -density 300 *.svg \
  -tile 15x30 \
  -geometry '+40+0' \
 ./papirus-icons-mimetypes.png

如果您另外指定所需的输出像素大小几何,例如。96 像素乘 96 像素,要理解什么在起作用-geometry '96x96+40+0'变得更加复杂。-density我没能深入了解;-)

于 2018-05-17T10:56:35.070 回答
0

我使用了 Victor gem https://github.com/DannyBen/victor

first_svg = File.open("first.svg").read
second_svg = File.open("second.svg").read

first_content = first_svg.split("\n")[1..-2].join(", ")
second_content = second_svg.split("\n")[1..-2].join(", ")

svg = Victor::SVG.new width: "100%", height: "100%"
svg << first_content
svg << second_content

svg.save 'final.svg'
于 2021-12-06T13:00:57.983 回答
-2

您可以从 ImageMagick 中查看蒙太奇:http ://www.imagemagick.org/Usage/montage/

您可以围绕它构建脚本。

于 2012-10-02T09:30:30.980 回答