Magick++ (GraphicsMagick) problems when using drawing text with DrawableFont() on macOS

Environment

  • MacOSX 10.11.6
  • GraphicsMagick 1.3.25 (installing with Homebrew)

If you get error when you specify "Arial" or "Microsoft Sans Serif" to font family. For example as following code:

// drawfont.cpp
#include <iostream>
#include <Magick++.h>

using namespace Magick;
using namespace std;

int main(int argc, char **argv)
{
    try {
        InitializeMagick(*argv);
        Color bg_color = Color("red");

        Image image("1000x1000", bg_color);

        std::list<Magick::Drawable> drawList;

        drawList.push_back(DrawablePointSize(200));
        drawList.push_back(DrawableFont("Microsoft Sans Serif", AnyStyle, 400, AnyStretch));
        //drawList.push_back(DrawableFont("/Library/Fonts/Arial.ttf")); // no problem
        drawList.push_back(DrawableText(10,150,"hello"));
        drawList.push_back(DrawableFont("Arial", AnyStyle, 400, AnyStretch));
        drawList.push_back(DrawableText(10,500,"hello"));

        image.draw(drawList);
        image.write("out.jpg");
    }
    catch(exception & error_)
    {
        cout<<"Caught exception : " << error_.what() << endl;
    }
}

Error Message

I get the following error

$ clang++ -std=c++11 -L/usr/local/lib -lGraphicsMagick++ -I/usr/local/include/GraphicsMagick -o drawfont drawfont.cpp
$ ./drawfont
Caught exception : Magick: Unable to read font (/usr/local/share/ghostscript/fonts/n019003l.pfb) reported by magick/annotate.c:1063 (RenderFreetype)

Solution

setup to type.mgk file.

script of generate type.mgk from system_profiler's font list (mgkgen.py)

setup sequence

$ system_profiler -xml SPFontsDataType > fontset.xml
$ python3 mgkgen.py fontset.xml > type.mgk
# backup if you need
$ cp /usr/local/Cellar/graphicsmagick/1.3.25/lib/GraphicsMagick/config/type.mgk /usr/local/Cellar/graphicsmagick/1.3.25/lib/GraphicsMagick/config/type.mgk.bk
$ cp type.mgk /usr/local/Cellar/graphicsmagick/1.3.25/lib/GraphicsMagick/config/type.mgk

check font list

$ gm convert -list font
Path: /usr/local/Cellar/graphicsmagick/1.3.25/lib/GraphicsMagick/config/type.mgk

Name                             Family                  Style   Stretch  Weight
--------------------------------------------------------------------------------
.SFNSDisplay-Ultralight          System Font             normal  normal    400
BigCaslon-Medium                 Big Caslon              normal  normal    400
Silom                            Silom                   normal  normal    400
.SFNSText-Light                  System Font             normal  normal    400
Chalkduster                      Chalkduster             normal  normal    400
STIXSizeThreeSym-Regular         STIXSizeThreeSym        normal  normal    400
TimesNewRomanPSMT                Times New Roman         normal  normal    400
AppleBraille-Pinpoint8Dot        Apple Braille           normal  normal    400
        :
MalayalamMN                      Malayalam MN            normal  normal    400
MalayalamMN-Bold                 Malayalam MN            normal  normal    400
STIXSizeTwoSym-Regular           STIXSizeTwoSym          normal  normal    400
AlTarikh                         Al Tarikh               normal  normal    400
.AlTarikhPUA                     .Al Tarikh PUA          normal  normal    400
DecoTypeNaskh                    DecoType Naskh          normal  normal    400
.DecoTypeNaskhPUA                .DecoType Naskh PUA     normal  normal    400
Farah                            Farah                   normal  normal    400
.FarahPUA                        .Farah PUA              normal  normal    400

try again

$ ./drawfont
$ ls
out.jpg