Можно ли связать файл онлайн-шрифта с PIL ImageFont.truetype ()? - PullRequest
0 голосов
/ 30 апреля 2020

Вместо локальной загрузки шрифта и связывания его с ImageFont.truetyp () это будет выглядеть так:

from pillow import ImageFont
font = ImageFont.truetype('Roboto-Regular.ttf', size=10)

Могу ли я сделать что-то вроде этого:

from pillow import ImageFont
font = ImageFont.truetype('https://github.com/googlefonts/roboto/blob/master/src/hinted/Roboto-Regular.ttf', size=10)

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

ImageFont.true_type принимает файлоподобный объект. Стандартная библиотека

Python, urllib.request.urlopen возвращает файлоподобный объект.

Должно работать следующее:

from pillow import ImageFont
from urllib.request import urlopen

truetype_url = 'https://github.com/googlefonts/roboto/blob/master/src/hinted/Roboto-Regular.ttf'
font = ImageFont.truetype(urlopen(truetype_url), size=10)
1 голос
/ 30 апреля 2020

Вы должны иметь возможность загрузить содержимое шрифта с помощью requests, а затем сделать из него файлоподобный объект с помощью BytesIO для передачи на ImageFont.truetype() вместо имени файла:

#!/usr/bin/env python3

from PIL import Image, ImageFont, ImageDraw
import requests
import io

# Load font from URI
r = requests.get('https://github.com/ProgrammingFonts/ProgrammingFonts/raw/master/Droid-Sans-Mono/droid-sans-mono-1.00/Droid%20Sans%20Mono.ttf', allow_redirects=True)
font = ImageFont.truetype(io.BytesIO(r.content), size=24)

# Create a black canvas and get drawing context
canvas = Image.new('RGB', (400,200))
draw = ImageDraw.Draw(canvas)

# Write in our font
draw.text((10, 10), "Hello, nice to meet you.", font=font, fill=(255,255,255))

canvas.save('result.png')

enter image description here

Я не могу определить правильный URL для вашего шрифта, поэтому я использовал случайный, другой.

...