我正在使用Python(纯净版,尚未使用外部库)生成SVG图像。在正确放置文本元素之前,我想知道文本元素的大小。有什么好的方法可以做到这一点吗?我查看了pysvg库,但是没有找到类似于getTextSize()的函数。
text
元素的宽度,而不是textpath
元素,至少您需要:xml:space
属性以及writing-mode
属性(也可以是从上到下而不仅仅是从左到右和从右到左)。
基于以上内容,打开正确的字体,并读取文本字符串中字形数据并提取字形的宽度和高度。找到字体本身可能就是一项艰巨的任务,因为字体文件可能隐藏在多个位置。
(可选)查找可能存在的连字号(根据语言),如果字体中存在,则用正确的字形替换它们。
将所有字符和空格的宽度相加,后者取决于间距属性和(可选)可能存在的字距调整对。Layout
的范围。os.cmd(/cygdrive/c/Program\ Files\ \(x86\)/Inkscape/inkscape.exe -f work_temp.svg -e work_temp.png -d 90 -D)
我使用这些函数来提取PNG数字,可以在链接中找到。请注意,我的代码已经针对Python3进行了微调(仍然适用于Python2)。
def is_png(data):
return (data[:8] == b'\x89PNG\r\n\x1a\n'and (data[12:16] == b'IHDR'))
def get_image_info(data):
if is_png(data):
w, h = struct.unpack('>LL', data[16:24])
width = int(w)
height = int(h)
else:
raise Exception('not a png image')
return width, height
if __name__ == '__main__':
with open('foo.png', 'rb') as f:
data = f.read()
print is_png(data)
print get_image_info(data)
它很笨重,但它工作了