【PHP】画像(jpg、png、gif)の作成方法

公開日:
更新日:
カテゴリー: PHP

PHPを使って任意のテキストが書き込まれた画像(拡張子:jpg、png、gif)を作成する方法をまとめています。

手順と使用する関数

以下に画像の作成方法の手順と使用する関数の説明を行いたいと思います。

画像の作成

画像を作成する場合、まずimagecreatetruecolor関数で画像(のリソースID)を作成します。

imagecreatetruecolor(画像の横幅, 画像の高さ);

  • 第1引数・・・作成したい画像の横幅を指定
  • 第2引数・・・作成したい画像の高さを指定

作成される画像の背景は黒色で、画像作成に失敗した場合「false」が返されます。

画像作成を行う関数にimagecreate関数もありますが、imagecreatetruecolor関数の方がより高品質な画像処理ができるようです。

画像で使用する色の作成

画像で使用する色の作成はimagecolorallocate関数を使います。

imagecolorallocate(画像リソース, R, G, B);

  • 第1引数・・・imagecreatetruecolor関数などで作成した画像のリソース
  • 第2引数・・・赤(R)コンポーネントの値 0~255
  • 第3引数・・・緑(G)コンポーネントの値 0~255
  • 第4引数・・・青(B)コンポーネントの値 0~255

この関数は第1引数で指定した画像で使用する色の作成を行います(引数で指定したRGBを配色とする色のリソースIDを返します)。

色の作成に失敗した場合「false」が返されます。

画像の背景色を設定

画像の背景色の設定は、imagefilledrectangle関数を使います。

imagefilledrectangle(画像リソース, X座標(始), Y座標(始), X座標(終), Y座標(終), 色のリソース);

  • 第1引数・・・imagecreatetruecolor関数などで作成した画像のリソース
  • 第2引数・・・X座標の開始位置
  • 第3引数・・・Y座標の開始位置
  • 第4引数・・・X座標の終了位置
  • 第5引数・・・Y座標の終了位置
  • 第6引数・・・imagecolorallocate関数で作成した色のリソース

この関数は、第1引数で指定された画像の、第2~5引数で指定された範囲(長方形)を第6引数で指定された色で塗りつぶします。

失敗した場合は「false」が返されます。

画像に文字列を書き込む

画像に文字列を書き込む場合、imagestring関数を使います。

imagestring(画像リソース, フォントの指定, 書き込む場所のX座標, Y座標,  "書き込む文字列", 色のリソース);

  • 第1引数・・・imagecreatetruecolor関数などで作成した画像のリソース
  • 第2引数・・・フォント(1~5のいずれかを指定、数字が大きいほど文字が大きい)
  • 第3引数・・・文字列を書き込むX座標(左上が基準)
  • 第4引数・・・文字列を書き込むY座標(左上が基準)
  • 第5引数・・・書き込む文字列(日本語だと文字化けになる)
  • 第6引数・・・imagecolorallocate関数で作成した色のリソース

この関数は、第1引数で指定した画像の上に、第5引数で指定された文字列を書き込みます。文字列の色は第6引数で指定できます。

失敗した場合は「false」が返されます。

なお、第2引数はimageloadfont関数で登録したフォントも使用可能です。

画像の拡張子を指定して保存

画像の拡張子を指定して保存 or ブラウザに出力する場合、以下の関数を使います。

例としてimagepng関数を取り上げます。

imagepng(画像リソース, '保存場所のパス', 圧縮レベル, フィルター);

  • 第1引数・・・imagecreatetruecolor関数などで作成した画像のリソース
  • 第2引数・・・画像の保存先のパス。省略可
  • 第3引数・・・圧縮レベル(0~9を指定、0の場合は圧縮しない)、省略可
  • 第4引数・・・画像ファイルの大きさを小さくする。省略可。詳細はマニュアルを参照。

この関数は拡張子pngを持ったファイルを作成します。

ブラウザに出力する場合は第1引数のみ指定し、サーバー上に保存する場合は第2引数以降を指定します。

画像を作成するサンプルプログラム

画像(png)を作成するサンプルプログラムを掲載したいと思います。

画像の背景色は赤、サイズは100×100、書き込む文字列は「TESTtest」です。

画像作成後はカレントディレクトリに「test.png」という名前で保存されます。

<?php

//ヘッダーの設定
header("Content-type: image/png");

//指定した大きさの黒画像を生成
$img = imagecreatetruecolor(100, 100);

//画像背景の設定
  //背景色の指定
  $background_color = imagecolorallocate($img, 255, 0, 0);
  //画像を背景色で塗る
  imagefilledrectangle($img, 0, 0, 300, 300, $background_color);

//画像に書き込むテキストの設定
  //テキスト色の指定
  $text_color = imagecolorallocate($img, 255, 255, 255);
  //画像に文字列を書き込む
  imagestring($img, 5, 5, 5,  'TESTtest', $text_color);

//画像の出力
imagepng($img);

//画像の保存
imagepng($img, './test.png');

//画像の消去(メモリの解放)
imagedestroy($img);

?>

これを実行すると次の画像が生成されます(誤って画像圧縮をかけたのでぼやけていますが、本来はもっと画質はクリアです)。

PHPで作成した画像(サンプル)

なお、上はpng画像を作成しましたが、jpg画像の場合は下記の部分を書き換えるだけです。

//ヘッダーの設定
header("Content-type: image/jpeg");

//画像の出力
imagejpeg($img);

//画像の保存
imagejpeg($img, './test.jpg');

また、gif画像の場合は下記です。

//ヘッダーの設定
header("Content-type: image/gif");

//画像の出力
imagegif($img);
 
//画像の保存
imagegif($img, './test.gif');

 

あわせて読んでほしい!

 

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント