読者です 読者をやめる 読者になる 読者になる

インストールされているフォント一覧を取得して、画像として表示する。

どんなフォントがインストールされているのかな?と気になったので
GD拡張モジュールで出力するスクリプトを書いた。

Ubuntu 11.04 + PHP5.3.6 + GD拡張モジュール 2.0

<?php 
if (!extension_loaded('gd')) {
    exit('GD拡張モジュールが読み込まれていません。');
}

define('TRUE_TYPE_DIR', '/usr/share/fonts/truetype/');

exec('find '.TRUE_TYPE_DIR.' -name "*.ttf"', $aryFontPath);

$image = ImageCreate(1000, count($aryFontPath)*20+10);
$white = ImageColorAllocate($image, 0xFF, 0xFF, 0xFF);
$black = ImageColorAllocate($image, 0x00, 0x00, 0x00);

$i = 1;
foreach($aryFontPath as $fontpath) {
    $fontpath = str_replace(TRUE_TYPE_DIR, '', $fontpath);
    $output   = dirname($fontpath) . DIRECTORY_SEPARATOR 
              . basename($fontpath, '.ttf') 
              . ': abc, ABC, あいう';
    ImageTTFText($image, 13, 0, 10, 20*$i++, $black, $fontpath, $output);
}

header('Content-type: image/png');
ImagePng($image);

ポイント

if (!extension_loaded('gd')) {
..
}

GD拡張モジュールがロードされているか判定しているところです。

exec('find '.TRUE_TYPE_DIR.' -name "*.ttf"', $aryFontPath);

findコマンドをつかってtruetypeディレクトリ以下のttfファイルを再帰的に取得します。

$fontpath = str_replace(TRUE_TYPE_DIR, '', $fontpath);
ImageTTFText($image, 13, 0, 10, 20*$i++, $black, $fontpath, $output);

ImageTTFText関数のフォントのパスは、/usr/share/fonts/truetype/を起点としたパスなので、findコマンドで見つかったフォントファイルのパスから、該当部分を消します。

実行結果例


Windows XP SP3 + PHP5.3.5 + GD拡張モジュール 2.0

ちなみにWindows版ですとこんな感じになりました。

<?php 
if (!extension_loaded('gd')) {
    exit('GD拡張モジュールが読み込まれていません。');
}

define('TRUE_TYPE_DIR', 'C:\WINDOWS\Fonts');

$d=dir(TRUE_TYPE_DIR);

while (false !== ($entry = $d->read())) {
   $aryFontPath[] = $entry;
}

$image = ImageCreate(1000, count($aryFontPath)*20+10);
$white = ImageColorAllocate($image, 0xFF, 0xFF, 0xFF);
$black = ImageColorAllocate($image, 0x00, 0x00, 0x00);

$i = 1;
foreach($aryFontPath as $fontpath) {
   if (!preg_match('/^[\.]/', $entry) and preg_match('/\.ttf$/i', $fontpath)) {
      $fontpath = TRUE_TYPE_DIR . DIRECTORY_SEPARATOR . $fontpath;
      $output   =  $fontpath . ': abc, ABC, あいう';
                
      ImageTTFText($image, 13, 0, 10, 20*$i++, $black, $fontpath, $output);
   }
}
header('Content-type: image/png');
ImagePng($image);