phi*_*ipp 5 javascript svg transformation
我正在寻找一种可能快速的方法来应用给定svg-graphic的所有变换矩阵.换句话说:算法应该删除所有"变换"属性,并将图形的所有坐标变换为绝对坐标.
他们的任何库可以做到这一点,还是他们的任何SVGDomInterface方法都可以做到这一点?
编辑::
如果我像这样调用整合方法:
$.each( svg.find( 'path' ), function( i ){
this.transform.baseVal.consolidate();
});
Run Code Online (Sandbox Code Playgroud)
没有任何反应,如果我这样称呼它:
$.each( svg.find( 'path' ), function( i ){
this.transform.animVal.consolidate();
});
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
那么,我应该如何使用"合并"方法,我应该在哪个元素上调用它?
问候菲律宾
这里有一个jsFiddle和一些javascript库代码(部分基于Raphael.js)将转换烘焙到所有路径的数据中:
http://jsfiddle.net/ecmanaut/2Wez8/
(不知道Opera在这里有什么用;它通常是SVG中最好的.我可能会以某种方式绊倒其他浏览器更宽容.)
合并方法仅将矩阵列表减少为单个矩阵.你在animVal示例中得到的错误是因为你不允许修改动画值(合并破坏性地修改变换列表).
为了回答你的问题,SVN DOM中没有现有的方法通过修改路径的值等来应用变换.Inkscape(以及Illustrator IIRC)中有一些选项用于应用这样的变换.
如果您正在寻找可以执行此操作的库或实用程序,您可以尝试使用SVG Cleaner.
SVG Cleaner似乎并没有为我应用所有变换,但是Inkscape确实如此.这是我需要申请时使用的命令行:
inkscape copy-of-file.svg --select=id-of-node \
--verb=EditCut --verb=EditPaste \
--verb=FileSave --verb=FileClose
Run Code Online (Sandbox Code Playgroud)
假设你在inkscape的prefs中将"Transforms - > Store transformation"设置为"Optimized"(我相信默认情况下它已启用),这将应用它并产生想要的结果.确保您对输入文件的副本进行操作,因为该操作会替换原始文件!
如果你在mac上运行它,你可能想先在你的shell中执行此操作:
alias inkscape=/Applications/Inkscape.app/Contents/Resources/bin/inkscape
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3965 次 |
最近记录: |