FA_ICONS = {
"fa-calendar": "
"fa-times-circle": "✖",
"fa-check-circle": "✔",
"fa-info-circle": "ℹ",
"fa-exclamation-circle": "
"fa-exclamation-triangle": "⚠",
"fa-lightbulb-o": "
"fa-bolt": "
#.. etc
}
). Мне нужно визуализировать эти значки в виде PNG-изображений с помощью Pillow, не требуя от пользователей установки системных шрифтов.
Преобразуйте значок в SVG с помощью элемента ``, используя символ Font Awesome Unicode, а затем визуализируйте с помощью cairosvg.
В результате вместо реального значка будет пустой квадрат (⯀). Это происходит в нескольких операционных системах (Windows/Linux/macOS).
Мне нужны значки векторного качества, которые масштабируются без пикселизации, и мне нужен полный доступ ко всем значкам Font Awesome 12, а не только к подмножеству, имеющему эквиваленты эмодзи.
Как я могу правильно отображать значки Font Awesome в виде изображений PNG, используя мой текущий стек, не требуя от пользователей установки системных шрифтов?
from PIL import Image
import cairosvg
import io
def render_fa_icon(icon_unicode: str = "\uf005") -> io.BytesIO:
"""Render Font Awesome icon by Unicode character"""
svg = f'''
{icon_unicode}
'''
png_bytes = cairosvg.svg2png(bytestring=svg.encode('utf-8'))
img = Image.open(io.BytesIO(png_bytes))
img.show() # Shows empty square
img_io = io.BytesIO()
img.save(img_io, format='PNG')
img_io.seek(0)
return img_io
# This produces an empty square
render_fa_icon("\uf005") # Unicode for fa-home
Environment:
- OS: Windows 11 / Ubuntu 22.04
- Python: 3.11.5
- Pillow: 10.1.0
- cairosvg: 2.7.0