LoginSignup
1

More than 5 years have passed since last update.

posted at

updated at

Magick++で利用可能なフォント一覧を取得するには

背景

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を直接叩けた。

関連投稿

関連記事

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1