猿问

是否可以将在线字体文件链接到 PIL ImageFont.truetype()?

而不是在本地下载字体并将其链接到 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)


开心每一天1111
浏览 136回答 3
3回答

喵喔喔

您应该能够下载字体的内容,requests然后用它们制作一个类似文件的对象,以代替文件名BytesIO传递给:ImageFont.truetype()#!/usr/bin/env python3from PIL import Image, ImageFont, ImageDrawimport requestsimport io# Load font from URIr = 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 contextcanvas = Image.new('RGB', (400,200))draw = ImageDraw.Draw(canvas)# Write in our fontdraw.text((10, 10), "Hello, nice to meet you.", font=font, fill=(255,255,255))canvas.save('result.png')我无法为您的字体计算出正确的 URL,所以我使用了一个随机的、不同的 URL。

慕容森

只需对@PeterWood 的回答稍作更改即可在 google colab 上进行这项工作:truetype_url = 'https://github.com/googlefonts/roboto/blob/master/src/hinted/Roboto-Regular.ttf?raw=true'我需要添加?raw=true到 truetype_url 的末尾

慕莱坞森

ImageFont.true_type接受一个类似文件的对象。Python 的标准库,urllib.request.urlopen返回一个类似文件的对象。以下应该有效:from pillow import ImageFontfrom urllib.request import urlopentruetype_url = 'https://github.com/googlefonts/roboto/blob/master/src/hinted/Roboto-Regular.ttf?raw=true'font = ImageFont.truetype(urlopen(truetype_url), size=10)要使那个特定的 url 工作,你需要添加?raw=true到最后。
随时随地看视频慕课网APP

相关分类

Python
我要回答