gpt4 book ai didi

python - 使用 svgwrite for python 时如何确定文本宽度和高度?

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:53 25 4
gpt4 key购买 nike

我想提取文本对象的像素大小 (svgwrite.Drawing.Text),因为它在使用给定样式格式化后会出现在文件中。我的字体是固定宽度的(Courier New)。

我需要它的原因是我想将一个字符串打印到 SVG 文件,然后在结果文本上映射一些信息:例如我有一个字符串“ABCDEF”,外部智者告诉我应该标记“BCD”部分。然后我需要知道有多少像素(单位?)在两个维度上被符号“A”和符号“BCD”覆盖,然后绘制一个彩色矩形,或透明框,或严格在“BCD”部分下的任何内容。

所以我有以下代码,我希望使用类似“w = text1.width”的东西来提取宽度,但它不能这样工作。预先感谢您尝试回答我的问题。

import svgwrite
my_svg = svgwrite.Drawing(filename = "dasha.svg", size = ("800px", "600px"))
text_style = "font-size:%ipx; font-family:%s" % (12, "Courier New")
text1 = my_svg.text("HELLO WORLD", insert=(0, 0), fill="black", style=text_style)
my_svg.add(text1)
my_svg.save()

UPD1 [22.06.2014]:我目前使用的中间解决方案是在 Inkscape 中手动测量具有特定字体和大小的字母的高度和宽度。我尽力了,但我不确定这些值是否完美,现在我无法在程序中更改字体大小。

最佳答案

我想确定 svgwrite 中特定字体的文本宽度。我最终使用了 http://blog.mathieu-leplatre.info/text-extents-with-python-cairo.html 中的以下解决方案:

def textwidth(text, fontsize=14):
try:
import cairo
except Exception, e:
return len(str) * fontsize
surface = cairo.SVGSurface('undefined.svg', 1280, 200)
cr = cairo.Context(surface)
cr.select_font_face('Arial', cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)
cr.set_font_size(fontsize)
xbearing, ybearing, width, height, xadvance, yadvance = cr.text_extents(text)
return width

它引入了 cairo 作为依赖项,但它是迄今为止我发现的最干净的独立于平台的解决方案。

关于python - 使用 svgwrite for python 时如何确定文本宽度和高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24337531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com