Inkscape的svg图java控制_平滑SVGmatrix在Inkscape中转换

简短的回答

在Inkscape中input变换matrix参数时,确保选中“编辑当前matrix”,因为如果将新的变换matrix应用于对象,实际上是将该新matrix与对象的现有变换matrix相乘,所以确保你编辑它。

QTusy.png

长答案

如何自己重新计算一切。

首先让我们尝试一下了解转换matrix。 变换matrix是将仿射变换(保持直线的变换)应用于vector的快捷巧妙的工具。

所以,如果你有一个向量(比如说2d坐标)和一个变换matrix,并且把它们相乘,那么最终将得到变换后的坐标,并且应用在变换matrix中定义的变换。

2cd12c868973ba568e86fa1785fbfddf.png

计算x'和y'的方法如下:

x' = a*x + c*y + ey' = b*x + d*y + f

接下来,我们需要了解一下svg格式。

根据w3c svg规范 , matrix变换恰好将这6个参数(a,b,c,d,e,f)作为参数。

所以,从你的例子来看,

我们有以下转换matrix参数:

a=0.443 b=0.896 c=-0.896 d=0.443 e=589.739 f=-373.223

现在,如果我们有下面的坐标: x=27, y=-9 ,我们可以使用之前定义的变换matrix进行变换:

x' = a*x + c*y + ex' = 0.443*27 + -0.896*-9 + 589.739 x' = 609.764 y' = b*x + d*y + f y' = 0.896*27 + 0.443*-9 -373.223 y' = −353.018

整洁,嗯? 你可以在这里获得更多的信息

但是,这不是全部。 我们还需要了解svgpath数据。

根据w3c svgpathdspecification ,path数据中的每个字母代表一条指令。 跟随指令的每个数字对代表一个坐标值。

从你的例子中,我们有以下path:

在这里我们看到,这个path对象使用一个绝对moveto指令(大写M ),一个相对smooth curveto三次Bézier曲线(小写s ),一个相对的lineto指令(小写l ),另一个相对smooth curveto三次Bézier曲线指令,接着是一个closepath指令(小写字母z )。

M486,313翻译为绝对移动到x = 486,y = 313

s27-9,43-29阅读起来有点复杂,因为一些昏迷被省略,因为如果负数是负数,则不需要,所以负号就像昏迷一样 – 反正,它转化为相对平滑的贝塞尔曲线x = 27,y = -9,x = 43,y = -29 (一个目标点和一个控制点)

等等。

那么,我们如何应用并从您的svg组中删除转换matrix呢? 像这样:

// we read the transformation matrix params // a=0.443 b=0.896 c=-0.896 d=0.443 e=589.739 f=-373.223 // we read the path data, and transform each instruction //

M486,313绝对移动到

x' = a*x + c*y + e = a*486 + c*313 + e = 524.589 y' = b*x + d*y + f = b*486 + d*313 + f = 200.892

移到指令现在是M524.589,200.892

S27-9,43-29 – 平滑curveto,对每个坐标重复相同的过程,但是将e和f (平移参数)设置为0,因为它是相对的指令而不是绝对的。

就是现在

s20.025,20.205,45.033,25.680999999999997

l26,4,1,23-22,5

会变成

l7.934000000000001,25.067999999999998,-20.165,11.085,-14.226,-17.497

S-25-6-48-3

会变成

S-5.698999999999999,-25.058000000000003,-18.576,-44.337

而z将保持z

所以最终的转换path将是:

我希望这对你有意义。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值