GDを使うとPHPで画像処理が可能です。頻繁にコールするとかそういうのには向いてないと思いますが、動的な画像生成においては必須と言えるかもしれません。
##画像の読み込み
画像ファイルの読み込みはimagecreatefromXXX( filename )
系列の関数群を用いて行います。いずれも第一引数に画像ファイルへのパス(またはURL)を要求します。読み込みに成功した場合にはリソース型を、エラー時にはfalse
を返します。
- imagecreatefromjpeg( filename )
- imagecreatefrompng( filename )
- imagecreatefromgif( filename )
##新規に画像を作成する場合
既存のファイルではなく,新規に画像を作成する場合は、imagecreatetruecolor( width, height )
関数を用いる。
##処理に使用する色を定義する。
処理に色を使用する場合、色情報も画像リソースの中に含めます。色情報の作成は次のようにして行います。
//通常のRGBによる色作成
$orange = imagecolorallocate($im, 220, 210, 60);
//アルファ値を指定しての色作成
$red = imagecolorallocatealpha($image, 255, 0, 0, 75);
第一引数にはimagecreate系の関数で得られるリソースを指定します。2番目以降の引数は、0-255の整数値で指定する他に、0x00-0xFFの16進値で指定することも可能です。
##画像のサイズ取得
単に画像のサイズを取得する場合はimagesx
関数とimagesy
関数をコールすればよい。これらの関数は引数に画像リソースを取り、int型でそれぞれ画像幅と高さを返す関数となっている。
getimagesize関数を用いて画像のサイズを取得することも可能。コレは引数に画像リソースを取り、配列を返す関数で、返り値の添字0,1が画像サイズになっている。
##画像のサイズ変更
画像のサイズ変更にはimagecopyresized関数を用います。返り値はTRUE/FALSE
###imagecopyresized関数の引数とその説明
arg | name | description |
---|---|---|
1 | dst_image | コピー先の画像リンクリソース。 |
2 | src_image | コピー元の画像リンクリソース。 |
3 | dst_x | コピー先の x 座標。 |
4 | dst_y | コピー先の y 座標。 |
5 | src_x | コピー元の x 座標。 |
6 | src_y | コピー元の y 座標。 |
7 | dst_w | コピー先の幅。 |
8 | dst_h | コピー先の高さ。 |
9 | src_w | コピー元の幅。 |
10 | src_h | コピー元の高さ。 |
なおimagecopyresampled関数を用いると、サイズ変更に再サンプリング処理を付与することが可能です。引数の内容などの使い方himagecopyresized関数と同じです。
##画像の出力
画像の出力にはimageXXX
系の関数を利用します。引数はimagepngを例に次のような形になります。
###JPEG形式での出力
imagejpeg( resource $image [, string $filename [, int $quality ]] )
- $image:出力するイメージのリソース
- $filename:出力先となるファイル名。この値を省略する、または明示的にnullを与えることにより、出力先をfileではなく標準出力に切り替えることができる。
- $quality:圧縮レベルを0-100の値で指定。デフォルトは75
###PNG形式での出力
imagepng( resource $image [, string $filename [, int $quality [, int $filters ]]] )
- $image:出力するイメージのリソース
- $filename:出力先となるファイル名。この値を省略する、または明示的にnullを与えることにより、出力先をfileではなく標準出力に切り替えることができる。
- $quality:圧縮レベルを0-9の値で指定
- filters:PNGファイルの大きさを調整するビットマスクフィルタ。資料なし
###GIF形式での出力
imagegif( resource $image [, string $filename ] )
- $image:出力するイメージのリソース
- $filename:出力先となるファイル名。この値を省略する、または明示的にnullを与えることにより、出力先をfileではなく標準出力に切り替えることができる。
###インターレースを設定する
画像のインターレースを有効にする場合、imageinterlace($im, true);
とする。第一引数は画像リソース。逆にインターレースを無効にする場合には第二引数に0をセットする(なお、0はデフォルト値)。この関数は、既にインターレースビットが設定されている場合に1を、それ以外の場合に0を返す。
##コードサンプル
目的の画像から縦横ともに1/2のサイズに縮小した画像を生成する例
<?php
header('Content-Type: image/jpeg');
// 目的の画像から幅、高さを取得し,半分の値を計算します。
list($width, $height) = getimagesize("test.jpg");
$new_width = $width * 0.5;
$new_height = $height * 0.5;
// 画像を読み込み再サンプリングして1/4に縮小します。
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg("test.jpg");
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// 出力
imagejpeg($image_p, null, 100);
?>