ImageFont.textsize () кажется неправильным - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь использовать PIL для предварительного вычисления размера, который будет принимать данная строка текста с заданным шрифтом и размером. PIL, казалось, был более или менее единственным рабочим решением.

Я попытался проверить результаты font.getsize(), сравнив его с размером текста, введенного в Adobe Illustrator. Они очень редко совпадают.

Я выбрал следующие настройки в Adobe Illustrator для своего текста:

  • единица измерения: pt
  • отслеживание: 0
  • кернинг: auto
  • размер шрифта: 9
  • текстовое содержание: последовательность из 25 "i" s

В 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 голосов
/ 15 ноября 2018

Мне удалось понять и выяснить, как получить желаемый эффект.

Спасибо Марку Сетчеллу за помощь в написании этого другого поста .

Я понял, что подушка заботится только о пикселях, а не о разрешении. Таким образом, мне нужно умножить размер шрифта, который я ему даю, на разрешение, на котором я собираюсь печатать, затем разделить результат на это разрешение и, наконец, преобразовать из pts в миллиметры.

Окончательная формула: getfont('...', resolution * font_size).getsize('...')[0] / resolution * 0.352778

...