PIL.ImageFont не удается открыть шрифт с пробелом в имени

#python #python-imaging-library

#python #python-imaging-library

Вопрос:

Я пытаюсь использовать PIL.ImageFont.truetype для открытия шрифта Это для проекта OCR

Пока мне не удалось найти решение в Google или на этом сайте. Проблема возникает, когда я пытаюсь открыть шрифт с пробелами в имени. Любое имя шрифта без пробела работает нормально

 from PIL import ImageFont

#This Works
ImageFont.truetype("C:WindowsFontsArial.ttf", 12)

#This does not
ImageFont.truetype("C:WindowsFontsTimes New Roman.ttf", 12)
  

Ошибка здесь:

Файл «B:Pythonlibsite-packagesPILImageFont.py «, строка 145, в инициализации layout_engine=layout_engine)
Ошибка операционной системы: не удается открыть ресурс

Я попробовал следующее
1) переименовать файл (в любом случае, это не элегантное решение)
2) переместить шрифт в тот же каталог, что и скрипт python
3) добавить / inside пробел (предлагается)

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

пока ничего не работает

Заранее спасибо

Ответ №1:

ОК,

Возможно, у меня есть решение. Подсказка пришла ко мне, когда я вводил имя файла шрифта и появилось контекстное меню.

В контекстном меню был список шрифтов. Все названия шрифтов были изменены на одно имя. Например, «Time New Roman» был изменен на «times»

Мне было бы любопытно узнать, где существует этот список. Я попытался найти его, но ничего не вышло.

Кроме того, в дополнение я хотел поработать с пользовательским шрифтом, которого не было в списке. После загрузки шрифта я переименовал его в шрифт single word. Затем я поместил шрифт в тот же каталог, что и мой скрипт на python. Это сработало нормально.

Я подумал, что опубликую это на случай, если у кого-нибудь еще возникнет такая же проблема

Ответ №2:

Это не та строка, о которой вы думаете:

 "C:WindowsFontsTimes New Roman.ttf"
  

Обратная косая черта — это экранирующий символ. Вам нужно экранировать обратную косую черту, чтобы получить настоящую обратную косую черту, вот так:

 "C:\Windows\Fonts\Times New Roman.ttf"
  

Вы также можете сделать это, если хотите:

 os.path.join('C:\', 'Windows', 'Fonts', 'Times New Roman.ttf')
  

Ответ №3:

Я нашел в Интернете список с именами шрифтов, сопоставленными имени файла. Вы можете использовать имя файла для соответствующего названия шрифта.

Например: для «Times New Roman» мы можем использовать «Times.ttf»

Пожалуйста, найдите полный список по ссылке ниже

https://learn.microsoft.com/en-us/typography/fonts/windows_10_font_list