|
ここでは画像ファイルのアップロードから、画像の変更、保存、削除を解説します。
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);
普通にファイルを削除します。
|