根据字符宽度将字符串分成多行(python)
作者:互联网
我正在通过PIL在基本图像上绘制文本.要求之一是,如果所有字符的组合宽度超过基本图像的宽度,它就会溢出到下一行.
目前,我正在使用textwrap.wrap(text,width = 16)来完成此操作.在这里,width定义一行中可容纳的字符数.现在,文本可以是用户生成的任何内容.因此,问题在于硬编码宽度不会考虑由于字体类型,字体大小和字符选择而引起的宽度可变性.
我什么意思
想象一下,我正在使用大小为14的DejaVuSans.ttf.W是14的长度,而’i’是4.对于宽度为400的基本图像,一行最多可以容纳100个i字符.但是只有29个W字符.我需要制定一种更聪明的包装方式来包装到下一行,即当字符宽度的总和超过基本图像宽度时,将字符串打断的行.
有人可以帮我制定这个吗?一个说明性的例子太棒了!
解决方法:
由于您知道每个字符的宽度,因此应将其放入字典,然后从字典中获取宽度以计算字符串宽度:
char_widths = {
'a': 9,
'b': 11,
'c': 13,
# ...and so on
}
在这里,您可以查找每个字母并使用该总和检查宽度:
current_width = sum([char_widths[letter] for letter in word])
标签:python,word-wrap,python-textprocessing 来源: https://codeday.me/bug/20191014/1912564.html