擅长:python、mysql、java
<p>下面是我的简单解决方案,它可以让你达到80%的准确率,非常适合我的目的。它只适用于Arial,它假定12磅字体,但它可能与其他字体成比例。在</p>
<pre><code>def getApproximateArialStringWidth(st):
size = 0 # in milinches
for s in st:
if s in 'lij|\' ': size += 37
elif s in '![]fI.,:;/\\t': size += 50
elif s in '`-(){}r"': size += 60
elif s in '*^zcsJkvxy': size += 85
elif s in 'aebdhnopqug#$L+<>=?_~FZT' + string.digits: size += 95
elif s in 'BSPEAKVXY&UwNRCHD': size += 112
elif s in 'QGOMm%W@': size += 135
else: size += 50
return size * 6 / 1000.0 # Convert to picas
</code></pre>
<p>如果你想截断一个字符串,这里是:</p>
^{pr2}$
<p>然后是:</p>
<pre><code>>> width = 15
>> print truncateToApproxArialWidth("the quick brown fox jumps over the lazy dog", width)
the quick brown fox jumps over the
>> print truncateToApproxArialWidth("THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG", width)
THE QUICK BROWN FOX JUMPS
</code></pre>
<p>渲染时,这些字符串的宽度大致相同:</p>
<p>敏捷的棕色狐狸跳过</p>
<p>敏捷的棕色狐狸跳了起来</p>