PHP GDライブラリを使用したサーバー上で画像加工 その1

PHPのGDライブラリを使用したインターネットサーバー上での画像加工を行います。
今回はその1として、GDライブラリの確認と基本的なコマンドの説明をします。

GDライブラリ確認

使用しているサーバーにGDライブラリがインストールされているかの確認を行います。

以下のソースコード

<?php
 var_dump(gd_info());
?>

をgd_info.phpと言うファイル名で保存して、
サーバーにアップロード後実行(ブラウザでアクセス)します。

ソースを表示すると

array(12) {
  ["GD Version"]=>
  string(26) "bundled (2.1.0 compatible)"
  ["FreeType Support"]=>
  bool(true)
  ["FreeType Linkage"]=>
  string(13) "with freetype"
  ["GIF Read Support"]=>
  bool(true)
  ["GIF Create Support"]=>
  bool(true)
  ["JPEG Support"]=>
  bool(true)
  ["PNG Support"]=>
  bool(true)
  ["WBMP Support"]=>
  bool(true)
  ["XPM Support"]=>
  bool(false)
  ["XBM Support"]=>
  bool(true)
  ["WebP Support"]=>
  bool(false)
  ["JIS-mapped Japanese Font Support"]=>
  bool(false)
}

バージョンその他の情報が取得されることを確認します。
取得出来なかった場合は、GDライブラリがインストールされてないので、サーバーのマニュアルに従ってインストールしてください。
ちなみに、XSERVERではGDライブラリはインストール済みです。

GDライブラリでの基本処理

画像を読み込む

まず加工する画像の読み込み、
読み込める画像形式は、
BMP、GD、GD2、GIF、JPEG、PNG、WBMP、WEBP、XBM、XPM
などです。
読み込み方法は、

//
// 画像リソース$imgに画像を読み込む
//


// 画像ファイルの場合(xxxは画像の拡張子[jpgとかpngなど])
$filename = __DIR__."/sample1.xxx";
// 画像URLの場合(xxxは画像の拡張子[jpgとかpngなど])
$filename = "https://info-biz.club/images/sample1.xxx";


// BMP画像を読み込む場合
$img = imagecreatefrombmp( $filename ); 

// GD画像を読み込む場合
$img = imagecreatefromgd( $filename ); 

// GD2画像を読み込む場合
$img = imagecreatefromgd2( $filename ); 

// GIF画像を読み込む場合
$img = imagecreatefromgif( $filename ); 

// JPEG画像を読み込む場合
$img = imagecreatefromjpeg( $filename ); 

// PNG画像を読み込む場合
$img = imagecreatefrompng( $filename ); 

// WBMP画像を読み込む場合
$img = imagecreatefromwbmp( $filename ); 

// WEBP画像を読み込む場合
$img = imagecreatefromwebp( $filename ); 

// XBM画像を読み込む場合
$img = imagecreatefromxbm( $filename ); 

// XPM画像を読み込む場合
$img = imagecreatefromxpm( $filename ); 

画像の書き込み

加工した画像は、簡単に書き込み保存することが出来ます。
GDライブラリで用意されている、保存できる画像の形式は
BMP、GD、GD2、GIF、JPEG、PNG、WBMP、WEBP、XBM、XPM
などです。
書き込む方法は

//
// 画像リソース$imgをファイル($filename)に書き込む
//

// 書き込むファイル名(xxxは画像拡張子[jpgとかpngなど])
$filename = __DIR__."/sample2.xxx";

// BMP形式の画像で書き込む場合
$res = imagebmp($img, $filename);

// GD形式の画像で書き込む場合
$res = imagegd($img, $filename);

// GD2形式の画像で書き込む場合
$res = imagegd2($img, $filename);

// GIF形式の画像で書き込む場合
$res = imagegif($img, $filename);

// JPEG形式の画像で書き込む場合
$res = imagejpeg($img, $filename);

// PNG形式の画像で書き込む場合
$res = imagepng($img, $filename);

// WBMP形式の画像で書き込む場合
$res = imagewbmp($img, $filename);

// WEBP形式の画像で書き込む場合
$res = imagewebp($img, $filename);

// XBM形式の画像で書き込む場合
$res = imagexbm($img, $filename);

// XPM形式の画像で書き込む場合
$res = imagexpm($img, $filename);

// 画像の書き込みが成功したか判定する場合
//
if($res){
  // 書き込み完了

  // ----------------------
  // 正常対応処理などを記述
  // ----------------------

}
else{
  // 書き込み失敗

  // ----------------------
  // 異常対応処理などを記述
  // ----------------------

}

画像の作成

画像ファイルを読まず、単純に画像のリソースを作成する方法

// 画像リソースの確保(インスタンス)
// 確保する画像リソースは、TureColorイメージ。
// 画像リソースのサイズ、幅と高さをピクセル値で指定します。

$img = imagecreatetruecolor( 画像の幅, 画像の高さ );

画像の大きさの取得

GDライブラリで読み込んだ画像の大きさは簡単に調べることが出来ます。
大きさ(幅と高さ)を調べる方法は

  // 画像の読み込み
  $img = imagecreatefromjpeg( $filename );

  // 画像の幅 $size_w
  $size_w = imagesx( $img );

  // 画像の高さ $size_h
  $size_h = imagesy( $img );

画像加工後の処理(後始末)

画像加工が終了したら、画像リソースの為に確保されたメモリを解放させます。
その方法は

// 画像リソース$imgの解放

$res = imagedestroy( $img );

// メモリ解放が成功したか判定する場合
//
if($res){
  // メモリ解放完了

  // ----------------------
  // 正常対応処理などを記述
  // ----------------------

}
else{
  // メモリ解放失敗

  // ----------------------
  // 異常対応処理などを記述
  // ----------------------

}