Search code examples
pythonubuntufontspython-imaging-library

How I can load a font file with PIL.ImageFont.truetype without specifying the absolute path?


When I write the code in Windows, this code can load the font file just fine:

ImageFont.truetype(filename='msyhbd.ttf', size=30);

I guess the font location is registered in Windows registry. But when I move the code to Ubuntu, and copy the font file over to /usr/share/fonts/, the code cannot locate the font:

 self.font = core.getfont(font, size, index, encoding)
 IOError: cannot open resource

How can I get PIL to find the ttf file without specifying the absolute path?


Solution

  • According to the PIL documentation, only Windows font directory is searched:

    On Windows, if the given file name does not exist, the loader also looks in Windows fonts directory.

    http://effbot.org/imagingbook/imagefont.htm

    So you need to write your own code to search for the full path on Linux.

    However, Pillow, the PIL fork, currently has a PR to search a Linux directory. It's not exactly clear yet which directories to search for all Linux variants, but you can see the code here and perhaps contribute to the PR:

    https://github.com/python-pillow/Pillow/pull/682