要同时应用缩放和翻转,只需在变换中列出两者即可:
transform="scale(2,2) scale(-1,1)"
或者简单地组合这些值:
transform="scale(-2,2)"
当然,负比例的问题是对象会翻转 SVG 的原点(左上角),因此它们可能会超出文档的边缘。您还需要通过添加翻译来纠正此问题。
例如,假设我们有一个 100×100 的文档。
<svg width="100" height="100">
<polygon points="100,0,100,100,0,100"/>
</svg>
要垂直翻转它,你可以:
<polygon points="100,0,100,100,0,100" transform="scale(2,-2)"/>
要纠正屏幕外的运动,您可以...
(选项 1)在翻转之前将其移至负值(这样它就会在屏幕上翻转回来):
<polygon points="100,0,100,100,0,100" transform="scale(2,-2) translate(0,-100)"/>
(此处将翻译列在第二位,因为变换列表是从右到左有效应用的)
(选项 2)或者,您可以随后将其正向移动(按缩放后的大小):
<polygon points="100,0,100,100,0,100" transform="translate(0,200) scale(-2,2)"/>
这是一个展示垂直翻转、水平翻转和双向翻转的演示
Update
翻转(就位)屏幕上某处已存在的对象。首先确定它的边界框(最小X、最小Y、最大X、最大Y), or 中心X,世纪如果你已经知道了。
然后将以下内容添加到其转换中:
translate(<minX+maxX>,0) scale(-1, 1) // for flip X
translate(0,<minY+maxY>) scale(1, -1) // for flip Y
或者如果您有可以使用的中心
translate(<2 * centreX>,0) scale(-1, 1) // for flip X
所以在你的例子中:
<rect x="75" y="75" width="50" height="50" transform="translate(-100, -100) scale(2, 2) scale(1, 1) rotate(45, 100, 100)" />
The 最小X+最大X达到 200。因此,要水平翻转,我们在前面添加:
translate(200,0) scale(-1, 1)
所以最终的对象就变成了:
<rect x="75" y="75" width="50" height="50" transform="translate(200,0) scale(-1, 1) translate(-100, -100) scale(2, 2) scale(1, 1) rotate(45, 100, 100)" />
演示在这里