Подушка (PIL Fork): ошибка при использовании методов ImageFont / ImageDraw с пользовательским шрифтом - PullRequest
0 голосов
/ 05 февраля 2020

После прочтения большей части документации Pillow, переполнения стека и Интернета, я не смог расшифровать это сообщение об ошибке, которое выбрасывает мое приложение. Моя текущая настройка:

Ниже приведен проверяемый пример того, над чем я работал. По сути, моя ошибка происходит, когда я использую title_font вместо того, где я использую default_font. Подчеркнуто 2 комментариями о том, что # TODO Aborts with error unless using default_font TODO.

from PIL import ImageFont, ImageDraw, Image

def app():
    # Default Font with static size and font type
    default_font = ImageFont.load_default()

    # TODO Title Font that is the desired use
    title_font = ImageFont.truetype(font="~/Library/Fonts/Verdana.ttf", size=36)

    # Background Image to draw text on
    bg_img = Image.new(mode = "RGBA",size = (3480,2160), color="Green")

    # Creates an object that can be used to draw in the given image.
    d = ImageDraw.Draw(bg_img)

    txt = "Hello World"

    # TODO: Aborts with error unless using default_font TODO
    # Returns (width, height) of text in pixels with designated font
    txt_width, txt_height = default_font.getsize(txt)

    print(f"Text Width:{txt_width} Text Height: {txt_height}")

    # TODO: Aborts with error unless using default_font TODO
    # Draws "Hello World" onto background image
    d.text((10,60), text=txt, font=default_font, fill=(255,255,255,255))

    # Pop Up window
    bg_img.show()

Ниже приведено сообщение об ошибке , которое я получаю от обоих методов ImageDraw / ImageFont:

>>> app()
dyld: lazy symbol binding failed: Symbol not found: _hb_language_get_default
  Referenced from: /usr/local/lib/libraqm.dylib
  Expected in: flat namespace

dyld: Symbol not found: _hb_language_get_default
  Referenced from: /usr/local/lib/libraqm.dylib
  Expected in: flat namespace

Я уже пробовал:

  • Чтобы изменить путь, используемый для пользовательского шрифта, и перейти на другой метод загрузки шрифта (например, ImageFont.load (имя файла) , ImageFont.load_path (имя файла) .
  • Чтобы согласиться с ImageFont.load_default(), но, как вы могли бы сказать, запустив его, шрифт по умолчанию очень маленький, и нет никакого способа изменить его размер или style.

Последняя вещь, в которой я не был уверен, была эта строка в руководстве по установке, которая рекомендована после brew install пакетов Подушка зависит от: Тогда смотрите figure / install_raqm_cmake. sh для установки libraqm. Можно найти здесь на полпути через раздел Построение на macOS . У меня есть ноющее чувство, что это может быть причиной, но Я просто не понимаю, какого действия он хочет, м е взять.

Долгое время скрывался, впервые постер. Спасибо за любую помощь сейчас и всю помощь, оказанную мне за эти годы!

ОБНОВЛЕНИЕ: Использовал мой пример на другом MacBook, и он отлично работает. Я собираюсь сбросить тот, на котором он не работал, и собрать его с нуля. Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 27 февраля 2020

Я предполагаю, что вы использовали (как и я) Ma c с ОС Catalina или аналогичной, и, возможно, также установили упомянутую библиотеку с "$ brew install libraqm".

Я решил это, изменив layout_engine, и из-за этого не использовал libraqm для работы с макетом PIL в фоновом режиме.

font = ImageFont.truetype(
            "/System/Library/Fonts/Keyboard.ttf", layout_engine=ImageFont.LAYOUT_BASIC, encoding=self.encoding, self.font_size,)

Если вы сделаете это, вы не сможете использовать китайские или аналогичные шрифты. Я не уверен, где, в 'brew', 'pyenv' или 'libraqm' проблема, но я пытаюсь выяснить это.

...