38
44

More than 5 years have passed since last update.

ざっくりGD - 画像処理の基本とサイズ変更

Posted at

 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);
?>

 

38
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
44