PHP で動的イメージを作成するのは非常に簡単です。以下、著者がそれを実現する方法を詳しく紹介します。
基本的なイメージ作成機能を使用する前に、GDライブラリファイルをインストールする必要があります。 JPEG 関連の画像作成機能を使用する場合は、jpeg-6b をインストールする必要があります。画像内で Type 1 フォントを使用する場合は、t1lib をインストールする必要があります。
イメージ作成環境をセットアップする前に、いくつかの準備を行う必要があります。まず、t1lib をインストールし、次に jpeg-6b をインストールし、次に GD ライブラリ ファイルをインストールします。インストール中は、GD をコンパイルしてライブラリに保存するときに jpeg-6b が使用されるため、ここで指定した順序でインストールする必要があります。jpeg-6b がインストールされていない場合、コンパイル中にエラーが発生します。
これら 3 つのコンポーネントをインストールした後も、PHP を再構成する必要があります。これが、PHP のインストールに DSO を使用してよい理由の 1 つです。 make clean を実行し、現在の PHP 動的イメージ作成構成に次のコンテンツを追加します:
--with-gd=[/path/to/gd]
--with-jpeg-dir=[/path/ to /jpeg-6b]
--with-t1lib=[/path/to/t1lib]
追加が完了したら、makeコマンドを実行し、次にmake installコマンドを実行し、Apacheを再起動してphpinfo()を実行して確認します。 new 設定が有効になったかどうか。これで、イメージの作成作業を開始できます。
インストールされている GD ライブラリ ファイルのバージョンに応じて、グラフィック ファイルを GIF 形式または PNG 形式で作成できるかどうかが決まります。 gd-1.6 以前のバージョンをインストールした場合、GIF 形式のファイルは使用できますが、PNG ファイルは作成できません。 gd-1.6 以降のバージョンをインストールした場合、PNG ファイルは作成できますが、GIF 形式のファイルは作成できません。
簡単な画像を作成するには多くの機能を使用する必要がありますが、それについては順を追って説明します。
次の PHP 動的画像作成例では、PNG 形式で画像ファイルを作成します。次のコードは、作成された画像の MIME タイプを含むヘッダーです:
ImageCreate() を使用して、代表的な空の画像変数を作成します。この関数にはピクセル単位の画像サイズのパラメータが必要です。その形式は ImageCreate(x_size, y_size) です。サイズ 250×250 の画像を作成したい場合は、次のステートメントを使用できます:
$newImg = ImageCreate(250,250);
画像はまだ空白なので、色で塗りつぶすこともできます。まず、ImageColorAllocate() 関数を使用して、RGB 値を使用してこの色に名前を割り当てる必要があります。この関数の形式は ImageColorAllocate([image], [red], [green], [blue]) です。空色を定義したい場合は、次のステートメントを使用できます:
$skyblue = ImageColorAllocate($newImg,136,193,255);
次に、ImageFill() 関数を使用して画像をこの色で塗りつぶす必要があります。 ImageFill() 関数には、ImageFillRectangle()、ImageFillPolygon() など、いくつかのバージョンがあります。簡単にするために、次の形式で ImageFill() 関数を使用します:
ImageFill([image], [start x point], [start y point], [color])
ImageFill($newImg,0,0, $skyblue);
最後に、画像の作成後に画像ハンドルと占有メモリを解放します:
<ol class="dp-xml"> <li class="alt"><span><span>ImagePNG($newImg); </span></span></li> <li> <span>ImageDestroy($newImg); </span><span class="tag">?></span><span> </span> </li> </ol>
このようにして、PHP動的画像作成のコード全体は次のようになります:
<ol class="dp-xml"> <li class="alt"><span><span class="attribute">$newImg</span><span> = </span><span class="attribute-value">ImageCreate</span><span>(250,250); </span></span></li> <li> <span>$</span><span class="attribute">skyblue</span><span> = </span><span class="attribute-value">ImageColorAllocate<br></span><span>($newImg,136,193,255); </span> </li> <li class="alt"><span>ImageFill($newImg,0,0,$skyblue); </span></li> <li><span>ImagePNG($newImg); </span></li> <li class="alt"><span>ImageDestroy($newImg); </span></li> <li> <span class="tag">?></span><span> </span> </li> </ol>
このスクリプトを記述し、ファイルを skyblue.php として保存し、ブラウザでアクセスすると、スカイブルーの 250×250 の PNG 形式の画像が表示されます。
画像作成機能を使用して、大きな画像を小さな画像に作成するなど、画像を処理することもできます。
画像があり、そこから 35×35 の画像を切り抜きたいとします。必要なのは、35×35 の空の画像を作成し、元の画像を含む画像ストリームを作成して、元の画像のサイズ変更したバージョンを新しい空の画像に配置することだけです。
このタスクを完了するための重要な関数は ImageCopyResize() で、次の形式が必要です:
ImageCopyResize([新しい画像ハンドル],[元の画像ハンドル],[新しい画像 X], [新しい画像 Y] , [元の画像画像 X]、[元の画像 Y]、[新しい画像 X]、[新しい画像 Y]、[元の画像 X]、[元の画像 Y])。
<ol class="dp-xml"> <li class="alt"><span><span>header('Content-type: image/png'); </span></span></li> <li> <span>$</span><span class="attribute">newWidth</span><span> = </span><span class="attribute-value">35</span><span>; </span> </li> <li class="alt"> <span>$</span><span class="attribute">newHeight</span><span> = </span><span class="attribute-value">35</span><span>; </span> </li> <li> <span>$</span><span class="attribute">newImg</span><span> = </span><span class="attribute-value">ImageCreate</span><span>($newWidth,$newHeight); </span> </li> <li class="alt"> <span>$</span><span class="attribute">origImg</span><span> = </span><span class="attribute-value">ImageCreateFromPNG</span><span>('test.png'); </span> </li> <li><span>ImageCopyResized($newImg,$origImg,0,<br>0,0,0,$newWidth,$newHeight,ImageSX<br>($origImg),ImageSY($origImg)); </span></li> <li class="alt"><span>ImagePNG($newImg); </span></li> <li> <span>ImageDestroy($newImg); </span><span class="tag">?></span><span> </span> </li> </ol>
この小さなスクリプトをresize.phpとして保存し、ブラウザでアクセスすると、35×35のPNG形式の画像が表示され、PHPの動的画像の作成が完了します。