PHPで画像ファイル形式を変換する

(1/1)
PHPでJPEG画像をPNG画像に変換する」では、JPEG画像をPNG画像に変換するプログラムを作ったが、これを応用し、GDライブラリが扱うことができる画像形式(BMP、GIF、JPEG、PNG、WEBPなど)を相互変換するプログラムを作ってみる。

目次

サンプル・プログラムの実行例

PHPで画像ファイル形式を変換する

サンプル・プログラム

圧縮ファイルの内容
imgconvert.phpサンプル・プログラム本体

準備:GDライブラリ

PHPでGDライブラリが有効になっていることが必要だ。
あらかじめ関数  phpinfo  を実行し、GD Support が enableになっていることを確認すること。

解説:変換テーブル

  36: //変換テーブル
  37: $ConvertInfoTable = array(
  38: //画像形式: from=>読み込み関数, to=>書き出し関数, id=>ID名
  39: IMAGETYPE_BMP  => array('from'=>'imagecreatefrombmp',  'to'=>'imagebmp',  'id'=>'BMP'),
  40: IMAGETYPE_GIF  => array('from'=>'imagecreatefromgif',  'to'=>'imagegif',  'id'=>'GIF'),
  41: IMAGETYPE_JPEG => array('from'=>'imagecreatefromjpeg', 'to'=>'imagejpeg', 'id'=>'JPEG'),
  42: IMAGETYPE_PNG  => array('from'=>'imagecreatefrompng',  'to'=>'imagepng',  'id'=>'PNG'),
  43: IMAGETYPE_WEBP => array('from'=>'imagecreatefromwebp', 'to'=>'imagewebp', 'id'=>'WEBP'),
  44: );
  45: 
  46: //デフォルトの変換形式
  47: define('DEF_TO', 'WEBP');

変換できる画像ファイル形式は、BMP, GIF, JPEG, PNG, WEBP である。それぞれに対応する GDライブラリ関数をグローバル配列変数 $ConvertInfoTable に用意しておく。将来的に対応画像形式が増えた際は、この配列に追加するだけで対応できる。

解説:画像ファイルの変換

 249: //画像形式変換
 250: if ($fname !'') {
 251:     //画像形式の判定
 252:     $imagetype = exif_imagetype($fname);
 253:     if (isset($ConvertInfoTable[$imagetype])) {
 254:         if (function_exists($ConvertInfoTable[$imagetype]['from'])) {
 255:             //画像読み込み
 256:             $img = $ConvertInfoTable[$imagetype]['from']($fname);
 257:             if (! $img) {
 258:                 $errmsg = '"' . $_FILES['upload']['name'. '" は' . $ConvertInfoTable[$imagetype]['id'. '画像ファイルではありません';
 259:             }
 260:         } else {
 261:             $errmsg = $ConvertInfoTable[$imagetype]['id'. '画像ファイルを読み込むことができません(GDライブラリをインストールしてください)';
 262:         }
 263:     } else {
 264:         $errmsg = '"' . $_FILES['upload']['name'. '" は読み込み可能な画像ファイルではありません';
 265:     }
 266:     //画像書き出し
 267:     if ($to !'') {
 268:         foreach($ConvertInfoTable as $arr) {
 269:             if ($to == $arr['id']) {
 270:                 if (function_exists($arr['to'])) {
 271:                     $ext = strtolower($to);
 272:                     header('Content-Type: image/' . $ext);
 273:                     header('Content-Disposition: attachment; filename=image.' . $ext);
 274:                     $arr['to']($img);
 275:                     exit(0);
 276:                 } else {
 277:                     $errmsg = $to . '画像ファイルに変換できません(GDライブラリをインストールしてください)';
 278:                 }
 279:             } else {
 280:                 $errmsg = $to . '画像ファイルに変換できません';
 281:             }
 282:         }
 283:     }
 284: }
 285: 
 286: //表示HTML作成

前述のグローバル配列変数 $ConvertInfoTable を参照しながら、画像ファイルの読み込みと変換を行う。
念のため、組込み関数  function_exists  を使って、当該関数が存在しているかどうかを逐次チェックする。
あとは、「PHPでJPEG画像をPNG画像に変換する」と同様の流れである。

参考サイト

(この項おわり)
header