Проблема рендеринга шрифтов в PIL - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь сгенерировать PNG изображение, содержащее некоторый пользовательский текст.
При создании нового холста изображения есть несколько вариантов выбора режима изображения (например: P, PA, RGB, RGBA и т. Д. c).
Когда я использую режим P, отображаемый текст не сглаживается.
Размер получаемого изображения значительно меньше при использовании режима P по сравнению с другими режимами, такими как RGB, RGBA так, это было бы моим предпочтением.
Я хотел бы знать, почему рендеринг шрифта зависит от цветовой палитры? Разве режима P (8-битных пикселей) с 256 цветами недостаточно для отображения шрифта?
Когда я использую несколько таких png изображений в качестве кадров и генерирую из них GIF изображение, качество изображения резко уменьшается. image'P' mode"> image'RGB' mode">

Как обсуждено в этой теме , я не хочу изменять размер изображения, которое занимает много времени ,

Ниже приведен код, который я использовал:

fnt = ImageFont.truetype('Assets/somefont.ttf',82)
  b = Image.new('P',(680,120),color=255)
  #b = Image.new('RGB',(680,120),color=255)
  draw = ImageDraw.Draw(b)
  #draw.fontmode = "0"
  draw.text((b.width/2, (b.height-50)/2), "88", fill=0, font=fnt)
  f = BytesIO()
  b.save(f, format='PNG')

1 Ответ

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

2 вещи:

  • использовать режим 'PA' для вашего изображения
  • преобразовать в 'RGB' перед сохранением

Таким образом, ваш код становится что-то вроде:

fnt = ImageFont.truetype('Assets/somefont.ttf',82)
b = Image.new('PA',(680,120),color=255)
draw = ImageDraw.Draw(b)
draw.text((b.width/2, (b.height-50)/2), "88", fill=0, font=fnt)
b = b.convert('RGB')
f = BytesIO()
b.save(f, format='PNG')

Я получил разумные результаты с этим подходом (очевидно, другой шрифт, но вы можете видеть, что он сглаживается): image using PA mode and RGB format

...