代码之家  ›  专栏  ›  技术社区  ›  Michael Gruenstaeudl

对包含大量元素的SVG文件进行操作

  •  0
  • Michael Gruenstaeudl  · 技术社区  · 7 年前

    假定 SVG R ,表示一个包含约160000个数据点且文件大小超过20 MiB的图形。具体地说,让我们假设这个SVG文件包含160000个XML循环定义。例如,请参见 this graph 因此,对于科学项目而言,该文件并非非典型文件。

    进一步假设您希望在SVG编辑器中对该文件进行后期处理(例如。, 墨迹 ).

    我发现,在一个典型的用户系统(x86_64 GNU/Linux、4个CPU、20 GiB RAM)上,通过一个典型的SVG编辑器几乎不可能对大于20Mb的SVG文件进行操作,因为该文件几乎没有加载到Inkscape中。

    我想到了解决这个问题的几种可能的方法,每种方法都有一个严重的缺点:

    • 使用以下工具优化SVG: svgo 预先而 斯维戈 确实会将文件大小减少约20%,这也会弄乱图形本身(正如上面链接的示例文件所做的那样)。

    • 使用不同的文件格式,例如 PDF 但是,Inkscape等编辑器通常会将PDF转换回SVG。

    • 通过R中不同的SVG渲染器保存图形。但是,基本命令和 svg() 还有指挥部 svglite()

    对于如何打开和手动编辑包含大量XML元素的SVG文件,有人有什么建议吗?

    0 回复  |  直到 7 年前
        1
  •  1
  •   Paul LeBeau    7 年前

    您确实找到了一个很好的SVG渲染器压力测试:)

    SVG包含一个似乎完全不必要的剪辑路径,该路径应用于每个数据点。

    如果我用一个组包围这些点,并将剪辑路径应用于该组点,则渲染时间将显著减少。

    • 铬:255秒->58秒
    • Firefox:188秒->14秒

    如果我完全删除该剪辑路径,我将得到:

    • 铬:27秒
    • 火狐:10秒。

    不幸的是,这些更改无助于Inkscape中的渲染时间,但希望它能以某种方式帮助您。如果您需要比这更快的渲染时间,您可能需要按照Robert所说的那样做,并以某种方式减少数据点的数量。