Как сделать так, чтобы PIL отображал русский язык?

Проблема: Я использую Pillow Lib v8.0.1 и я хочу создать фото с текстом, который программа напишет на фото, используя либу Pillow. Особенностью моей строки является то, что в ней содержится переменная, поэтому мне нужно перед строкой еще ставить префикс f, т.е. f'{some_value} не большой'. Как и сама строка, some_value - тоже содержит русские символы. На форумах stackoverflow я узнал, что все символы в Python 3 переводятся в формат unicode автоматически, поэтому поначалу я не рассматривал проблему с кодировкой. Таким образом, мой код выглядел вот так:

el1 = f'{some_value} не большой'
img = Image.open('shopui.png', 'r') # 1842x1026
img_w, img_h = img.size
font_size = 12
font_color = (0, 0, 0)
background = Image.new('RGBA', (1440, 900), (255, 255, 255, 255))
draw = ImageDraw.Draw(img)
font = ImageFont.truetype("18965.ttf", font_size)
draw.text((10, 80), el1, font=font, fill=font_color)
img.save('shopui.png')  

После вызова описанной выше программы в консоли появлялась такая ошибка:

error from callback <bound method SocketHandler.handle_message of <amino.socket.SocketHandler object at 0x000002A497216A00>>: 'latin-1' codec can't encode characters in position 6-10: ordinal not in range(256)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\websocket\_app.py", line 344, in _callback
    callback(*args)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\amino\socket.py", line 80, in handle_message
    self.client.handle_socket_message(data)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\amino\client.py", line 345, in handle_socket_message
    return self.callbacks.resolve(data)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\amino\socket.py", line 204, in resolve
    return self.methods.get(data["t"], self.default)(data)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\amino\socket.py", line 192, in _resolve_chat_message
    return self.chat_methods.get(key, self.default)(data)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\amino\socket.py", line 221, in on_text_message
    def on_text_message(self, data): self.call(getframe(0).f_code.co_name, objects.Event(data["o"]).Event)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\amino\socket.py", line 209, in call
    handler(data)
  File "C:\Users\1\Desktop\python bots\amino_faq\bot.py", line 125, in on_text_message
    upd_coins_and_level(difference, k, data.message.author.nickname, data.message.author.userId, activity,
  File "C:\Users\1\Desktop\python bots\amino_faq\bot.py", line 82, in upd_coins_and_level
    draw.text((10, 80), el1, font=font, fill=font_color)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\PIL\ImageDraw.py", line 379, in text
    draw_text(ink)
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\PIL\ImageDraw.py", line 339, in draw_text
    mask = font.getmask(
  File "C:\Users\1\Desktop\ИНФА\pycharm\venv\lib\site-packages\PIL\ImageFont.py", line 148, in getmask
    return self.font.getmask(text, mode)

Вопрос: Очевидным решением проблемы было просто подставить к строке префикс u (пробовал исправить таким образом строку не содержащую {some_value} (таким образом, без префикса f) и все работало как по маслу). Однако у меня в строке без префикса f никак не обойтись, поэтому у меня и возник такой вопрос: как совместить два префикса: f и u, чтобы программа могла переводить всю строку в формат unicode, а также опознавать {some_value}.

Буду крайне благодарен за любую помощь. Спасибо заранее.


Ответы (0 шт):