我有多个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)
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优化工具.
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)