【发布时间】:2012-09-23 03:41:23
【问题描述】:
我有一个程序可以批量生成多个 SVG 文件,然后我需要能够将它们组合(平铺)到一个文件中,并设置空白并以厘米(或毫米)为单位设置宽度。
我需要一个现有的脚本或一个指向我可以使用哪些库和语言来完成此任务的指针。有什么建议从哪里开始?
【问题讨论】:
标签: scripting svg batch-processing
我有一个程序可以批量生成多个 SVG 文件,然后我需要能够将它们组合(平铺)到一个文件中,并设置空白并以厘米(或毫米)为单位设置宽度。
我需要一个现有的脚本或一个指向我可以使用哪些库和语言来完成此任务的指针。有什么建议从哪里开始?
【问题讨论】:
标签: scripting svg batch-processing
你可以看看蒙太奇,来自 ImageMagick:http://www.imagemagick.org/Usage/montage/
您可以围绕它构建您的脚本。
【讨论】:
是的,正如@victor-henriquez 所说,您可以使用montage,但这有点棘手,我通过激活-verbose 输出进入它,并看到它创建了一个inkscape 命令并分析它为我解决了这个问题.
montage -version
# Version: ImageMagick 7.0.7-31 Q16 x86_64 20180506
我想要……
-label 和-pointsize(通过pointsize 使字体大小正确,但取决于密度)-density(很难为输出找到合适的数字)-tile 15x30(此处为 15 列 x 30 行)-geometry '+40+0'(水平添加40px,垂直添加0px)生成的命令是(添加-verbose 以获取详细的处理信息):
montage -label '%f' -pointsize 2 -density 300 *.svg \
-tile 15x30 \
-geometry '+40+0' \
./papirus-icons-mimetypes.png
如果您另外指定所需的输出像素大小几何,例如。 96 像素 x 96 像素 -geometry '96x96+40+0',理解 -density 的作用变得更加复杂。我没能深入了解;-)
【讨论】:
我使用了 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'
【讨论】: