LoginSignup
1
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-06

背景

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

関連投稿

関連記事

1
1
0

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
  3. You can use dark theme
What you can do with signing up
1
1