有哪些优化SVG的选项?

Jak*_*old 55 svg

我有多个SVG,其中一些相当大(11MB),它们是使用pdf2svg从PDF创建的.

问题是,SVG太大,需要很长时间才能打开,并且不必要地复杂.它主要包含文本和一些图像(想想报纸),文本被分成小块的字符,甚至不是单词.

我需要优化它,首先要减小尺寸,还要减少元素的数量,以使其加载更快.到目前为止,我唯一想到的就是查看一行中的字符,并将它们合并为一个字符<tspan>.

这应该会大大减少文本元素的数量,因为它看起来主要是1-5个字母的组.

但我正在寻找一些我可以对SVG做的事情以减小尺寸.还有一个主字体,用于约95%的文本,但就像现在一样,所有文本都被定义为字形(渲染形状).

是否可以只嵌入字体,因此文本呈现为文本,而不是形状?

此外,如果您知道有任何更好的库将PDF转换为SVG,我会很感激任何输入.唯一的要求是SVG输出应该与PDF完全相同.

我还想指出速度并不重要.转换需要多长时间并不重要,只要它产生所需的结果即可.

小智 27

SVG-Cleaner似乎运行得很好:比其他人快得多,压缩效果更好,我的测试更健壮,批处理文件夹处理,嘿!一个Windows安装程序为我们懒人!

我的尝试:原始文件大小:241 KB,在InkScape删除引用后:149K,使用工具清理:38 KB,清理和压缩:5 KB(.sgvz文件扩展名).

我试图打开最后一个,期待一张空白的图画...但我的图形仍然完好无损!

在这里下载(Windows,Ubuntu或Source)

  • Windows下载链接不起作用(至少目前).windows版本可以[这里]下载(http://sourceforge.net/projects/svgcleaner/) (2认同)

Pet*_*dge 22

我最近开始制作一个Python程序来优化SVG,您可以在以下网址找到它:https://github.com/petercollingridge/SVG-Optimiser

有一个非常初步的在线版本:http: //petercollingridge.appspot.com/

有关更多信息,请访问:http: //www.petercollingridge.co.uk/blog/svg-optimiser

它远非完整且可能非常多,但它处理Chasbeen提到的一些问题,例如删除不必要的精度和默认样式属性.如果您知道要查找的内容,它还可以删除不必要的属性和命名空间,并将样式转换为CSS,这样可以更轻松地查看它们的改进方式.

我真的不明白你对嵌入字体的意思.如果您粘贴SVG的示例片段,显示了gyph和多个字符元素,我可能会包含一个方法来组合它们.


ecm*_*aut 22

我可以推荐Scour,因为我在清除SVG文件中不必要的瑕疵时自己经常使用它,这是我的一个爱好.

一个示例scour命令行可能很好地为您服务(我倾向于从中开始):

scour --enable-viewboxing --create-groups --shorten-ids --enable-id-stripping --enable-comment-stripping --disable-embed-rasters --remove-metadata --strip-xml-prolog -p 9 < old.svg > new.svg
Run Code Online (Sandbox Code Playgroud)

一定要比较旧的和新的,以确保它没有破坏任何东西,并尝试降低-p小数精度(默认为5,如果你不给一个); 在某种程度上,它可能开始扭曲事情非常糟糕,但高一或两位小数应该看起来不错.

如果您想采用更加手动的方法,那么在Kilobyte SVG Challenge变更集中收集了大量的交易技巧,这对于这类事物来说就像是一种综合的学习和教学场所.

是的,您可以在SVG文件中嵌入字体,或链接外部字体,如Mike Bostock对WebPlatform.org徽标(此处为非html包装版本)所示.

如果你对使用什么字体的详细知识比你选择任意pdf并转换它,那么当然要容易得多.我不知道有任何工具可以从原始pdf嵌入的任何字形创建无名字体,而不需要自己完成大部分(或全部)工作.

此外,Kilobyte SVG挑战自述文件的工具部分中有越来越多的SVG优化工具.


Col*_*son 8

https://github.com/svg/svgo

sudo npm install -g svgo
Run Code Online (Sandbox Code Playgroud)

优化当前目录中的所有svgs:

svgo -f .
Run Code Online (Sandbox Code Playgroud)

如果你没有npm,你可以在Ubuntu上安装它,如下所示:

sudo apt-get update && sudo apt-get install nodejs-legacy npm
Run Code Online (Sandbox Code Playgroud)

  • 使用Inkscape 0.48创建的SVG 1.1不太好用.SVGO输出凌乱的形状,不能使用它. (2认同)