背景
mruby-mrmagickでフォントを扱えるようにしてインスタ映えをめざそうかなぁ
とふと思いついた
Magick++のAPIにはなさそう
Magick++のAPIを睨めっこしたが、三日たったがそれらしい記述を
みつけることが出来なかった。
Wandじゃない、MagickCore APIでやるみたいな雰囲気
まぁ、
convert -list font|grep Font:
をsystem関数で呼び出すのでも十分実用的な気がしなくもなかったが、
GraphicsMagickでImageMgaickのv6/v7の両版でも動くような
コードが以下に出来上がった。
#include <iostream>
#include <Magick++.h>
using namespace std;
using namespace Magick;
int
main (int argc, char **argv)
{
InitializeMagick (*argv);
long unsigned int num;
#if MagickLibVersion > 0x100000
char **fontList = MagickLib::GetTypeList ("*", &num);
#else
#if MagickLibVersion < 0x700
MagickCore::ExceptionInfo exception;
#else
ExceptionInfo exception;
#endif
char **fontList = GetTypeList ("*", &num, &exception);
#endif
for (int i = 0; i < num; i++)
{
cout << fontList[i] << endl;
}
return 0;
}
~
以下の様にしてビルドできるハズ
clang++ -o fontTest fontTest.cpp `Magick++-config --cppflags --cxxflags --ldflags --libs`
g++でもビルドできます。
メモ
GraphicsMagickはUbuntu16.04LTSのモノでしか試していないので、
最新のもだと対応が必要かも。
GraphicsMagickだとMagickLibの名前空間でCoreなAPIが
ラップされ、ImageMagick内の例外情報もC++側からは、
触らずに済むようになっている。
まぁ、これはこれで、C++で閉じてる感があり悪くない。
ImageMagickのv6だと、ExceptionInfoがMagickCoreの名前空間内に
定義されており、これを使う必要がある。
ImageMagickのv7が一番素直にCのAPIを直接叩けた。