2323# - setWeights function needs improvement
2424# - 'light' is an invalid weight value, remove it.
2525
26+ from base64 import b64encode
2627import dataclasses
2728from functools import lru_cache
29+ from io import BytesIO
2830import json
2931import logging
3032from numbers import Number
@@ -380,23 +382,20 @@ def findSystemFonts(fontpaths=None, fontext='ttf'):
380382 return [fname for fname in fontfiles if os .path .exists (fname )]
381383
382384
383- def fontentry_helper_repr_html_ (fontent ):
384- html = (f"<span style='font-family:{ fontent .name } '>"
385- f'{ fontent .name } '
386- '</span>' )
385+ def fontentry_helper_repr_png_ (fontent ):
386+ from matplotlib .figure import Figure # Circular import.
387+ fig = Figure ()
388+ font_path = Path (fontent .fname ) if fontent .fname != '' else None
389+ fig .text (0 , 0 , fontent .name , font = font_path )
390+ with BytesIO () as buf :
391+ fig .savefig (buf , bbox_inches = 'tight' , transparent = True )
392+ return buf .getvalue ()
387393
388- if fontent .fname == '' :
389- return html
390- else :
391- return ('<span>'
392- '<style>'
393- '@font-face { '
394- f'font-family: { fontent .name } ; '
395- f'src: url({ fontent .fname } ); '
396- '} '
397- '</style>'
398- f'{ html } '
399- '</span>' )
394+
395+ def fontentry_helper_repr_html_ (fontent ):
396+ png_stream = fontentry_helper_repr_png_ (fontent )
397+ png_b64 = b64encode (png_stream ).decode ()
398+ return f"<img src=\" data:image/png;base64, { png_b64 } \" />"
400399
401400
402401FontEntry = dataclasses .make_dataclass (
@@ -416,6 +415,7 @@ def fontentry_helper_repr_html_(fontent):
416415 It is used when populating the font lookup dictionary.
417416 """ ,
418417 '_repr_html_' : lambda self : fontentry_helper_repr_html_ (self ),
418+ '_repr_png_' : lambda self : fontentry_helper_repr_png_ (self ),
419419 }
420420)
421421
0 commit comments