gdライブラリを利用してサムネイルを作成する画像アップローダを作る

保存先ディレクトリを選択できる画像アップローダー

/***  受け取ったあとの処理 ***/
//格納するディレクトリ
$updir = "../images";
//アップロードされたファイルが存在するかどうかを確認
if( is_uploaded_file($_FILES["upfile"]["tmp_name"])or die("no")){
//アップロードされたファイルをディレクトリへコピーする
if( move_uploaded_file($_FILES["upfile"]["tmp_name"], $updir . "/" . $_FILES["upfile"]["name"])or die("nono")){
chmod($updir . "/" . $_FILES["upfile"]["name"], 0644);
$file_name = $updir . "/" .  $_FILES["upfile"]["name"];
}else {
print "ファイルをアップロードできません。";
}
} else {
print "ファイルが選択されていません。";
}
//アップロードした画像を加工する
$image = ImageCreateFromJPEG($file_name);
    //元画像のサイズを取得する
$size = getimagesize($file_name);
$old_width = $size[0]; //横
$old_height = $size[1]; //縦
    //いろいろ出力して確認しながら。。。
//print "<br>画像の横幅:" . $old_width ."<br>";
    //サムネイルの横幅
$new_width = "80";
    //縦と横が同じ比率で圧縮されるように計算する
$rate = $new_width / $old_width;
$new_height = $old_height * $rate;
//print "圧縮比:" . $rate . "<br>";
    //縮小された画像を貼り付ける(?)画像を作成する
$new_image = ImageCreateTrueColor($new_width, $new_height);
    //imagecopyresizedで元画像を圧縮する
if(ImageCopyResized($new_image, $image,0,0,0,0,$new_width,$new_height,$old_width,$old_height)){
print "圧縮されました";
}
//サムネイルを保存するためのパスとファイル名。ここではthumというディレクトリを作ります
$updirthum = $updir . "/thum/" . $_FILES["upfile"]["name"];
//imageJPEGで圧縮した画像をJPEGとして保存します。
imageJPEG($new_image, $updirthum)or die("could not save image");
画像IDを破棄します
imagedestroy ($dst_img);
imagedestroy ($src_img);

ちなみに縮小した画像を表示するには

header("ContentType: image/jpeg");
imagejpeg($new_image);

とします。

imagejpegの前にヘッダー情報を出力しないと、もしくはヘッダー情報の前に何か出力してると、
画像が文字列で出力されてしまいます。。。

画像の表示はできるのに保存ができず2,3日困ってしまいましたが、ただのパーミッッションの
問題だったようです。

SSHでログインして

chmod [775] [ディレクトリ名]

で解決しました。
保存先を別のディレクトリにしてるときは注意

コメント

  1. Inuha より:

    参考になりました!
    中々画像をリサイズしてサーバーに保存する方法が書かれたサイトが無くて、、、
    (どのサイトもリサイズした画像を表示するだけ)
    あと、「画像IDを破棄します」の「//」が抜けているのと、全角スペースが混じってましたよ〜

タイトルとURLをコピーしました