我正在使用python生成一个可以变化的文本的SVG,并且我想在它后面放一个半透明的矩形,以保证稍后在其他图形元素上叠加时的对比度。
不幸的是,我不知道如何预测SVG中特定文本字符串的像素范围。我可以选择我使用的字体(但我不认为等宽可以接受)以及我使用的字体大小。
我如何使用python预测SVG文本的范围,以便生成适当大小的矩形?
答案 0 :(得分:4)
我认为如果你在Python中做到这一点会让事情变得混乱。可能压力最小的方法是安装FreeType并使用它来为您计算文本尺寸。但对于相当小的坚果来说,这是一把非常大的锤子。
This answer显示了一种更简单的方法 - 使用SVG过滤器将背景直接应用于文本,而无需调整任何大小。
您也可以将此方法用于半透明背景:
<svg width="360" height="100" viewBox="0 0 360 100">
<defs>
<filter x="0" y="0" width="1" height="1" id="text-bg">
<feFlood flood-color="#ff0" flood-opacity="0.5" />
<feComposite in="SourceGraphic" />
</filter>
</defs>
<rect x="0" y="0" width="400" height="100" fill="#444" stroke="none" />
<path d="m0 10 40 80 40-80 40 80 40-80 40 80 40-80 40 80 40-80 40 80"
stroke="#888" stroke-width="10" fill="none" />
<text font-family="Arial" font-weight="bold" filter="url(#text-bg)"
x="180" y="50" font-size="20" fill="#000" text-anchor="middle">
Edit this text and reload the SVG
</text>
</svg>
&#13;