【问题标题】:Combining SVG images programmatically以编程方式组合 SVG 图像
【发布时间】:2012-09-23 03:41:23
【问题描述】:

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

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

【问题讨论】:

    标签: scripting svg batch-processing


    【解决方案1】:

    你可以看看蒙太奇,来自 ImageMagick:http://www.imagemagick.org/Usage/montage/

    您可以围绕它构建您的脚本。

    【讨论】:

    • 蒙太奇好像不支持矢量图形。
    • 它支持 SVG。我和他们一起使用蒙太奇没有问题。 ImageMagick® 是一个用于创建、编辑、合成或转换位图图像的软件套件。它可以读取和写入各种格式(超过 100 种)的图像,包括 DPX、EXR、GIF、JPEG、JPEG-2000、PDF、PhotoCD、PNG、Postscript、SVG 和 TIFF。
    • 但据我所知,我需要将数据转换为栅格才能使用蒙太奇?我也需要 SVG 输出。
    【解决方案2】:

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

    SVG STACK

    SVG UTILS

    然后你就可以用像

    这样的工具来清理你的svg

    SCOUR

    【讨论】:

      【解决方案3】:

      是的,正如@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 的作用变得更加复杂。我没能深入了解;-)

      【讨论】:

        【解决方案4】:

        我使用了 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'
        

        【讨论】:

          猜你喜欢
          • 2010-09-27
          • 2012-01-14
          • 1970-01-01
          • 2011-10-05
          • 1970-01-01
          • 2018-07-09
          • 2012-11-24
          • 1970-01-01
          • 2011-04-18
          相关资源
          最近更新 更多