HOMEデジタルカメラ・写真集・写真素材集PC講座・インターネット活用PCゲームPHPによるCGI美容ショッピングこのサイトについて
PHPの小枝:画像アップローダー

■PHPの小枝
PHPの使い方
フォームの受け渡し
SJISの不具合
画像アップローダー
Cookieの読み書き
├ ファイル操作
ランダム処理
配列Arrayの扱い方
参考文献

■掲示板


mail@管理人

 

 

 ここでは画像ファイルのアップロードから、画像の変更、保存、削除を解説します。

 HTMLのFORM:
  <form method="post" action="***.php" enctype="multipart/form-data">
  <input type="file" name="file">

 ブラウザからファイルを送信するのに使います。
 enctype"multipart/form-data"はファイルを送信するために指定します。

 ファイルの確認:is_uploaded_file($_FILES["file"]["tmp_name"])
 POSTでアップロードされたファイルか確認します。(セキュリティーの役目)

 元のファイル名:$_FILES["file"]["name"]
 ファイル名の取得に使います。

 ファイルサイズの取得(単位Byte):$_FILES["file"]["size"]
 巨大なファイルを拒否するために使います。

 種類(MIME)の取得:$_FILES["file"]["type"]
 目的(この場合は画像)以外のファイルを拒否するために使います。

 アップロードファイルの移動:move_uploaded_file($_FILES["file"]["tmp_name"],ディレクトリとファイル名);
 送信されただけではファイルはサーバーの一時ディレクトリにあるので、ファイルに名前を付けて自分のサイトに移動させます。

使用例

//<input type="file" name="file">

if(!is_uploaded_file($_FILES["file"]["tmp_name"])){echo "Error:不正はしないでください";exit;}
if($_FILES["file"]["size"] > 15*1024){echo "Error:ファイルサイズは15KBまでです"; exit;}

$imgtype = $_FILES["copybnr"]["type"];
switch ($imgtype){
 case "image/pjpeg": $ext = ".jpg"; break;
 case "image/gif": $ext = ".gif"; break;
 case "image/x-png"
: $ext = ".png"; break;
 case "image/bmp": $ext = ".bmp"; break;
 default: echo
"Error:ファイル形式が違います"; exit;
}
$imgfile = "img/name".$ext;//保存先を指定。$extは拡張子になります。

/*元のファイル名で保存するならこちらを使う

$imgfile = "img/" . $_FILES["file"]["name"];
*/

move_uploaded_file($_FILES["file"]["tmp_name"],$imgfile);

 ファイルの大きさの取得:$size=getImageSize("$imgfile");
 横幅:$size[0]  縦幅:$size[1]   
 画像の種類:$size[2](値が1ならGIF,2=JPEG,3=PNG,4=SWF,5=不明,6=BMP)

 JPEG画像の作成:$img_in=ImageCreateFromJPEG("$imgfile");
 PNG画像ならImageCreateFromPNGとなり、BMPも使えます。
 GIFについてはGD1.6以降では使えないようです。著作権の問題でしょうか。
 補足ですが、GD2.0.15においてGIFも使えました。(??)
 変更前の画像として利用します。

 新規に空画像の作成:$img_out=ImageCreate($width,$high);
 $widthは横幅を$highは縦幅を指定します。
 GD2.01以上なら$img_out=ImageCreateTruecolor($width,$high);
 を使った方が滑らかになります。

 リサイズ:ImageCopyResized($img_out,$img_in,0,0,0,0,$width,$high,$size[0],$size[1]);
 元の画像を新しい幅にサイズ変更します。
 GD2.01以上ならImageCopyResampled($img_out,$img_in,0,0,0,0,$width,$high,$size[0],$size[1]);
 を使った方が滑らかになります。
 ( )内は、出力,入力, 出力X始点,出力Y始点,入力X始点,入力Y始点,出力横幅,出力縦幅,入力横幅,入力縦幅 になります。

 変更された画像の保存:ImageJPEG($img_out,$newfile);
 $img_outの画像を$newfileのファイル名で書き出します。
 PNG等の形式で読み取り、JPEGで書き出すことも可能です。
 PNGで書き出すには、ImagePNG( )となります。
 補足ですが、GD2.0.15において、GIFでの書き出しはできませんでした。

 メモリの解放:ImageDestroy($img_in);
 $img_inや$img_outの確保されたメモリを解放します。

使用例

$length = 240;   //最大幅240pxのサムネイル画像を作る
$size=getImageSize("test.jpg");

//縦幅より横幅が大きければ横幅を固定、縦幅が大きければ縦幅を固定
if($size[0] >= $size[1]){$width = $length; $high = $size[1] * $length / $size[0];}
else{$width = $size[0] * $length / $size[1]; $high = $length;}

$img_in=ImageCreateFromJPEG("test.jpg");//元画像を生成

// GD2.01以降必須 フルカラーで滑らかなサイズ変更ができる
$img_out=ImageCreateTruecolor($width,$high);
ImageCopyResampled($img_out,$img_in,0,0,0,0,$width,$high,$size[0],$size[1]);

/* GD2.01未満の場合こちらを使う 変更後の画像が荒くなる
$img_out=ImageCreate($width,$high);
ImageCopyResized($img_out,$img_in,0,0,0,0,$width,$high,$size[0],$size[1]);
*/

ImageJPEG($img_out,"test_small.jpg");//画像ファイルの書き出し
ImageDestroy($img_in);
ImageDestroy($img_out);

実行結果

元画像はこちら

GD2.01未満での結果
GD2.01以上での結果

 ファイルの削除:unlink($imgfile);
 普通にファイルを削除します。