如何使用适当的字距调整来反转 SVG 文本?
How to Invert SVG text with appropriate kerning?
如何反转(旋转 180 度)文本对象,以便适当地调整文本?
我的示例使用 Python 和 svgwrite 包,但我的问题似乎与任何 SVG 有关。
假设我使用以下代码:
dwg = svgwrite.Drawing()
dwg.add(dwg.text(fullName, (int(width/2.),gnameHeight),
font_size=gnameFontSize, text_anchor="middle"))
以上代码生成的文本如下所示:
dwg.text()
对象接受应用于文本字符串中所有字符的 rotate
参数,因此我首先使用以下代码反转字符串:
pcRotate = [180]
ngap = 1
revFullName = fullName
rcl = []
for c in revFullName:
rcl.append(c)
for i in range(ngap):
rcl.append(' ')
rcl.reverse()
revFullName = ''.join(rcl)
dwg.add(dwg.text(revFullName, (int(width/2.),pcnameHeight),
font_size=gnameFontSize, text_anchor="middle", rotate=pcRotate))
但是,这会产生下面非常丑陋的版本:
这是在字符之间使用人为的 space 间隙,以使其稍微不易读。
在这种颠倒的情况下,利用标准文本使用的任何字距调整的最佳方法是什么?
<text>
元素的 rotate
属性适用于需要旋转单个字符的情况。如果你想旋转整个文本对象,那么你应该使用 transform
代替。
http://pythonhosted.org/svgwrite/classes/mixins.html#transform-mixin
我将此作为自我回答发布,只是为了让格式更加清晰。来自@paul-lebeau 的两个有用提示愉快地得到了承认。
虽然 svgwrite
包看起来很可靠,但它的文档有点单薄。我希望它说的两件事:
<text>
元素的 rotate
属性适用于需要旋转单个字符的情况。如果你想旋转整个文本对象,那么你应该使用 transform mixin 代替。
- 如果您需要将转换后的文本相对于某个中心(默认的当前用户坐标系除外)居中,请添加两个附加参数
xctr,yctr
。这与调用单个 center
参数(2 元组)的文档不同。
正确的代码是:
pcRotate = 'rotate(180,%s,%s)' % (int(width/2.),pcnameHeight)
textGroup = svgwrite.container.Group(transform=pcRotate)
textGroup.add(dwg.text(fullName, (int(width/2.),pcnameHeight),
font_size=gnameFontSize, text_anchor="middle"))
dwg.add(textGroup)
如何反转(旋转 180 度)文本对象,以便适当地调整文本?
我的示例使用 Python 和 svgwrite 包,但我的问题似乎与任何 SVG 有关。
假设我使用以下代码:
dwg = svgwrite.Drawing()
dwg.add(dwg.text(fullName, (int(width/2.),gnameHeight),
font_size=gnameFontSize, text_anchor="middle"))
以上代码生成的文本如下所示:
dwg.text()
对象接受应用于文本字符串中所有字符的 rotate
参数,因此我首先使用以下代码反转字符串:
pcRotate = [180]
ngap = 1
revFullName = fullName
rcl = []
for c in revFullName:
rcl.append(c)
for i in range(ngap):
rcl.append(' ')
rcl.reverse()
revFullName = ''.join(rcl)
dwg.add(dwg.text(revFullName, (int(width/2.),pcnameHeight),
font_size=gnameFontSize, text_anchor="middle", rotate=pcRotate))
但是,这会产生下面非常丑陋的版本:
这是在字符之间使用人为的 space 间隙,以使其稍微不易读。
在这种颠倒的情况下,利用标准文本使用的任何字距调整的最佳方法是什么?
<text>
元素的 rotate
属性适用于需要旋转单个字符的情况。如果你想旋转整个文本对象,那么你应该使用 transform
代替。
http://pythonhosted.org/svgwrite/classes/mixins.html#transform-mixin
我将此作为自我回答发布,只是为了让格式更加清晰。来自@paul-lebeau 的两个有用提示愉快地得到了承认。
虽然 svgwrite
包看起来很可靠,但它的文档有点单薄。我希望它说的两件事:
<text>
元素的rotate
属性适用于需要旋转单个字符的情况。如果你想旋转整个文本对象,那么你应该使用 transform mixin 代替。- 如果您需要将转换后的文本相对于某个中心(默认的当前用户坐标系除外)居中,请添加两个附加参数
xctr,yctr
。这与调用单个center
参数(2 元组)的文档不同。
正确的代码是:
pcRotate = 'rotate(180,%s,%s)' % (int(width/2.),pcnameHeight)
textGroup = svgwrite.container.Group(transform=pcRotate)
textGroup.add(dwg.text(fullName, (int(width/2.),pcnameHeight),
font_size=gnameFontSize, text_anchor="middle"))
dwg.add(textGroup)