Magick++ (GraphicsMagick) problems when using drawing text with DrawableFont() on macOS
Posted on Wed, 07 Jun 2017 21:58:34 +0900
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