PHPでPNG画像を動的に生成する

こんばんは。きわさです。

今回のテーマはPHPでPNG形式の画像を動的に生成する です。
例えば、このような灰色背景に白字で’Sample Text’と書かれた画像image.pngがあります。
image.png

このような画像を表示する際、htmlには

<img src='./image.png' />

と書くかと思いますが、phpで動的に生成する場合はこれを

<img src='./image.php' />

このように、書くことができるのです。
では、この image.php はどうなっているかというと次のようになっています。

<?php
$image = imagecreate(150, 150);
imagecolorallocate($image, 0xdd, 0xdd, 0xdd);
$fontColor = imagecolorallocate($image, 0xff, 0xff, 0xff);
header('Content-Type: image/png');
imagettftext($image, 20, 0, 0, 85, $fontColor, './arial.tff', 'Sample Text');
imagepng($image);
imagedestroy($image);
?>

意外と短いですね。

簡単に説明すると
まずimagecreate() でサイズを指定して画像を作成しています。
resource imagecreate(int $width, int $height)
$widthで幅、$heightで高さを指定して新規画像を作成し、画像IDを返却します。

次にimagecolorallocate()
int imagecolorallocate(resource $image, int $red, int $green, int $blue)
画像IDで指定した画像内で使用する色IDを返却します。
色はRGBで指定します。紫なら$red, $green, $blue = 255, 0, 255、黄色なら255, 255, 0といった感じです。
最初にimagecolorallocate()をコールした際の指定が背景色になります。

header(‘Content-Type: image/png’)ではpng形式の画像であることを示しています。

そしてimagettftext()
array imagettftext(resource $image, float $size, float$angle, int $x, int $y, int $color, string $fontfile, string text)
$imageは画像ID、$sizeはフォントサイズ、$angleは文字方向です。$angleは0では左から右に、90では下から上にといった具合です。
$x$yは左上を基点(0, 0)とした場合のテキストの表示位置です。ただしこれは左下の座標であることに注意です。
$colorは色ID、$fontfileはTrueTypeフォントのパス、$textが表示テキストです。

最後に、imagepng() で画像を出力し、imagedestroy() でメモリを解放しています。

今回は無地背景でしたが、png画像にテキストを書き加えたりといったこともできるようなので色々できそうですね。

スポンサーリンク