我正在处理SVG地图,其中包含{strong> 个text
元素。问题是,旧的/源文件是多年前在Adobe Illustrator中生成的,出于某种原因,该文件将这些元素打印为例如:
<text transform="matrix(1 0 0 1 604.9754 765.0283)">4</text>
(前四个参数(1、0、0、1)永远不变。)
我想要实现的是将其翻译为类似的内容
<text x='123' y='456'>4</text>
我已经设法使用正则表达式收集了所有必需的值(文本内容和最后两个转换参数),但是我不知道下一步该怎么做。我也发现了
matrix()转换函数以六个值的转换矩阵形式指定一个转换。 matrix(a,b,c,d,e,f)等同于应用变换矩阵:
\ begin {pmatrix} a&c&e \\ b&d&f \\ 0&0&1 \ end {pmatrix}
通过以下矩阵等式将坐标从先前的坐标系映射到新的坐标系:
\ begin {pmatrix} x _ {\ mathrm {newCoordSys}} \\ y _ {\ mathrm {newCoordSys}} \\ 1 \ end {pmatrix} = \ begin {pmatrix} a&c&e \\ b&d &f \\ 0&0&1 \ end {pmatrix} \ begin {pmatrix} x _ {\ mathrm {prevCoordSys}} \\ y _ {\ mathrm {prevCoordSys}} \\ 1 \ end {pmatrix} = \ begin {pmatrix } a x _ {\ mathrm {prevCoordSys}} + c y _ {\ mathrm {prevCoordSys}} + e \\ b x _ {\ mathrm {prevCoordSys}} + d y _ {\ mathrm {prevCoordSys}} + f \\ 1 \ end {pmatrix}
所以我的问题是:
如何将这些矩阵转换值转换为X,Y坐标?
答案 0 :(得分:1)
我发现matrix(1 0 0 1 100px 200px)
等同于translateX(100px) translateY(200px)
,这意味着这些值实际上是我一直在寻找的确切值。我之所以没有意识到这一点,是因为我没有对新图像进行调整(相乘,相加)。我还使用X作为反方向的Y坐标(哎哟)。我希望它可以帮助某人。