Я исправил ошибку. Проблема заключается в том, что объект шрифта, возвращаемый ImageFont.truetype('fontfile', size = desired_size)
(в данном случае объект selected_font
), имеет атрибут size, который является неизменным.
selected_font = ImageFont.truetype('Arial.ttf', size = 20)
print(selected_font.size) #output: 20
selected_font.size = 10 #doesn't raise an error
print(selected_font.size) #output: 20
, и поэтому эта строка не обновляется переменная, которую я проверяю в l oop
selected_font.size += 2 #does nothing, and raises no errors
Чтобы добавить к путанице, модуль TextWrapper имеет изменяемый атрибут размера для своей переменной ширины строки
wrapper.width += 5 #works as you'd expect
В любом случае, я решил свою проблему с этим кодом
fontsize = 10
while selected_font.getsize_multiline(beautiful_text)[1] > (0.7 * img.size[1]):
fontsize -= 2
selected_font = ImageFont.truetype("src/CaviarDreams.ttf", size = fontsize)
и так далее для других циклов.