如何使用svgwrite在保存SVG前将路径旋转180°?
在svgwrite中保存前将图形旋转180°
当然可以实现!你只需要给目标图形元素添加旋转变换即可,svgwrite支持直接通过元素的transform属性来设置这类变换,下面给你两种实用的实现方式:
方法一:直接给path添加rotate变换
你可以在创建path时直接指定transform属性。需要注意:默认旋转是围绕SVG画布原点(0,0)进行的,如果你的箭头不在原点,旋转后可能会偏离预期位置。如果希望围绕箭头自身中心旋转,需要先计算它的中心坐标,再用rotate(角度, 中心x, 中心y)的格式设置。
针对你的代码,修改后的示例如下:
import svgwrite dwg = svgwrite.Drawing('arrow.svg') # 先计算箭头的大致中心:你的路径x范围0-66.28,y范围243.76-283.45,中心约为(33.14, 263.6) path = dwg.path( d='M 0,283.45145 H 39.819792 v 13.22917 L 66.278127,270.22229 39.819793,243.76395 v 13.22917 H 0 Z', transform='rotate(180, 33.14, 263.6)' ) dwg.add(path) dwg.save()
方法二:使用svgwrite的Transform工具类
svgwrite提供了更直观的Transform类来构建变换,可读性更强:
import svgwrite from svgwrite.transforms import Transform dwg = svgwrite.Drawing('arrow.svg') path = dwg.path(d='M 0,283.45145 H 39.819792 v 13.22917 L 66.278127,270.22229 39.819793,243.76395 v 13.22917 H 0 Z') # 创建旋转变换,参数依次为角度、旋转中心x、旋转中心y transform = Transform() transform.rotate(180, 33.14, 263.6) path.update(transform=transform) dwg.add(path) dwg.save()
精准获取旋转中心的技巧
如果想要更精准的中心坐标,可以通过path.bounding_box()方法获取路径的边界框,再计算中心:
bbox = path.bounding_box() center_x = (bbox[0] + bbox[2]) / 2 center_y = (bbox[1] + bbox[3]) / 2 # 之后用center_x和center_y作为旋转中心参数即可
这样就能让箭头精准围绕自身中心完成180度旋转,保存后的SVG就是你想要的效果啦!
内容的提问来源于stack exchange,提问作者mrgou
相关产品推荐
相关产品推荐

