PHP+imagickで使用可能なフォントの一覧を取得する

ImageMagickでテキストを描画する際のフォントは
1.定義済みのリストにあるフォント名/フォントファミリー
2.パス付のファイル名
のいずれかで指定する。

定義済みのリストは「-list font」で取得可能(6.3.6より前のバージョンでは「-list type」。ImageMagickのバージョンはphpinfoを参照)

リストを取得するコマンドをPHPで実行
  1. exec("convert -list font", $output);
  2. // 結果の表示
  3. print_r($output);
  4. // テキストファイルを書き出す場合
  5. $output = implode("\n", $output);
  6. file_put_contents("fonts.txt", $output);

コマンドプロンプトで実行する場合は以下
  1. convert -list font > fonts.txt

フォントのリストはこのような構成
Path
┣Font
┃┗family、style、stretch、weight、glyphs
┣Font
┃┗family、style、stretch、weight、glyphs
 ︙

ImagickDraw::setFontで指定に用いるのはFontの項目。
形式は「Trebuchet-MS」のようにフォントファミリーのスペースがハイフンに変換されている、「Georgia-Bold」のように後ろにウェイトが追加されている といった感じ。
ImagickDraw::setFontFamilyではfamilyの項目を記述する。

指定したいフォント名にマルチバイト文字が含まれていて、尚且つPHPの内部エンコーディングはUTF-8でマシンはSJIS、といった場合には文字列の文字エンコーディングを変換して取り扱う。
  1. $font = 'IPA-P明朝';
  2. $font = mb_convert_encoding($font,"SJIS");
  3. $draw->setFont($font);

また、glyphsの項目はdowncase処理されているため、glyphsのURLにマルチバイト文字が含まれている場合は要注意。
例)ゴシック→ピプッハ


関連記事:
Imagick::queryFontsでフォントの一覧を取得する
http://malog-notes.blogspot.jp/2014/02/imagickqueryfonts.html


※Pathの項目の「type-ghostscript.xml」はGhostscriptのインストールの有無を問わずリストに含まれていて、Ghostscriptがインストールされていない環境で「type-ghostscript.xml」のフォント名を指定すると最悪Apacheが落ちるのでこちらも要注意。