Do You PHP?    
Search Engine Optimization  php5 powerd  Valid XHTML 1.0!  Valid CSS!  このサイトのはてなブックマーク数 



last updated
2003/07/10

counter hits
since 1999/11/06


動的な画像作成

alertここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。

zip形式 tgz形式

memoPHP3の頃にもあったネタですが、PHP4.xでも基本的には同じです。

PHPは、GDライブラリを使った画像ファイル(バージョンによって、gifあるいはpngのいずれかをサポート)の作成もサポートしています。

caution[2002/02/24] PHPマニュアルにもあるとおり、gd-1.6より前のバージョンのgdはgifイメージ画像をサポート、gd-1.6以降のバージョンはpngをサポートしています。gdをサポートさせるときは、インストールされているバージョン、libgd.soのインストール先を確認しましょう。

UNIXの場合、PHPのconfigure時に--with-gdオプションを付けて再make、make installします。Windows版では、php.iniのextension=php_gd2.dllをアンコメントします。再install後、phpinfoを実行し、サポート状況を確認しておきます。

phpinfo画面

memo今回試したときの各ライブラリは、Vine Linuxでインストールされるrpmを使っています(gd-1.8.3/libpng-1.0.7/libjpeg-6b)。また、TrueTypeフォントをサポートさせるため、FreeTypeライブラリ(freetype-2.0.8)を別途ソースからmake・installしています。そして、configure時に「--with-gd --with-ttf --with-freetype-dir=/usr/local --with-jpeg-dir --with-png-dir --with-xpm-dir」を付けています。

以下のサンプルは、Oracle の表領域の空き具合を棒グラフにしたpngファイルを動的に作成します。なお、画像を作成するbar.phpでは、Content-Typeを指定する必要があります。

memo実際に作成された画像は、作成したpng画像こんな感じです。

●gd.phpの抜粋

<?php
        :
?>
        :
<td><img src="bar.php?pct=<?php echo $pct; ?>"></td>
        :
<?php
        :
?>

●gd.php

<?php
    /* 新規画像の作成 */
    $img = ImageCreate(100, 16) or die ("Cannot Initialize new GD image stream");

    /* 色の作成(暗い赤) */
    $col = ImageColorAllocate($img, 160, 0, 0);

    /* 塗りつぶし */
    ImageFill($img, 0, 0, $col);

    /* 色の作成(暗い緑) */
    $col = ImageColorAllocate($img, 0, 160, 0);

    /* 塗りつぶした矩形を張り付け */
    ImageFilledRectangle($img, 0, 0, $pct, 15, $col);

    /* pngの出力 */
    Header("Content-type: image/png");
    Header("Cache-control: no-cache");
    ImagePng($img);

    /* メモリの解放 */
    ImageDestroy($img);
?>

イメージファイル中に文字列を出力するにはImageString関数がありますが、組み込みフォントが使われます。TrueTypeフォントを使う場合はImageTTFText関数を使いますが、マルチバイト文字を表示させる場合、文字列をmb_convert_encoding関数でUTF-8に変換してやる必要があります。また、別解としては、PHPのconfigure後に作成されるMakefileを以下のように編集する、というものがあります。

●Makefile修正前
GDLIB_CFLAGS = -I/usr/.../gd/libgd -DHAVE_LIBPNG -DHAVE_LIBJPEG -DHAVE_LIBFREETYPE
  
●Makefile修正後
GDLIB_CFLAGS = -I/usr/.../gd/libgd -DHAVE_LIBPNG -DHAVE_LIBJPEG -DHAVE_LIBFREETYPE -DJISX0208
  


About This Site |  Privacy Policy |  Contact
Copyright © 1999 - 2003 by Hideyuki SHIMOOKA all rights reserved.