ImageFont.textsize()似乎错误

时间:2018-11-06 09:28:38

标签: python python-imaging-library

我正在尝试使用PIL预先计算给定文本行在给定字体和大小下的尺寸。 PIL或多或少是唯一可行的解​​决方案。

我试图通过将font.getsize()的结果与Adobe Illustrator中键入的文本大小进行比较来检查结果。他们似乎很少匹配。

我在Adobe Illustrator中为文本选择了以下设置:

  • 单位:pt
  • 跟踪:0
  • 字距调整:auto
  • 字体大小:9
  • 文本内容:25个“ i”的序列

在python REPL中,我使用ImageFont.truetype('...', 9)指令创建了字体,然后将其命名为font.getsize('...'),其文本与Adobe Illustrator中的文本相同

我测试过的所有字体的数字都不同,除了Arial:

| Font                | Width in Illustrator | Result with Pillow |
|---------------------|----------------------|--------------------|
| Arial               | 49.987               | 50                 |
| AppleGothic         | 35.774               | 26                 |
| Times New Roman     | 62.513               | 75                 |
| Museo Sans 700      | 60.074               | 50                 |
| StixIntegralsD Bold | 60.074               | 50                 |

以下是我使用的相关软件的版本:

  • 操作系统:macOS 10.13.6
  • Python:3.6.5
  • 枕头:5.3.0

1 个答案:

答案 0 :(得分:0)

我设法理解并发现了如何获得理想的效果。

感谢Mark Setchell在this other post方面为我提供了帮助。

我要了解的是,枕头只关心像素,而不关心分辨率。因此,我需要将给出的字体大小乘以要打印的分辨率,然后将结果除以该分辨率,最后从pts转换为毫米。

最终公式为getfont('...', resolution * font_size).getsize('...')[0] / resolution * 0.352778