現在写真データをアップロードするスクリプトを作成しようと考えております。
以下が現在作成途中段階のサイトです。
サイト:http://oskuni7.sakura.ne.jp/upload.php
このサイトに下記の機能を付け加えたいと考えております。
●アップロードするファイル名をPHPの中で変えてアップロードする。
●画像をPHPの中で指定したサイズに変更してアップロードする。
上記機能を追加するにはどのようなコードを付け加えればよろしいでしょうか?
お手数をおかけしますが、知っている方おりましたらよろしくお願いいたします。
画像のリサイズ等の処理はImageMagickを使うと簡単かつ色々出来ます。
http://mechanics.civil.tohoku.ac.jp/soft/node43.html
またImageMagickはphp用にimagickというインターフェースが存在しています。
少しインストールが手間ですが、ソースコードは綺麗になりますので、
こちらを使った方が望ましいです。
http://php.benscom.com/manual/ja/book.imagick.php
サンプルを書いてみました。環境が解らないのでimagickは使用していません。
<?php /** * 画像ファイルのアップロードテスト * * サーバに画像をアップロードして、サムネイルの作成を同時に行います。 * このスクリプトの置かれているパスにimg, thumbnailの両ディレクトリが * 書き込み権限がある状態で存在している事を想定しています。 */ # var_dump($_FILES); isset($_FILES['upfile']) or die("no uploaded file \n"); $filename = $_FILES['upfile']['name']; # アップロードされたファイルの元々の名前 $tmpFilename = $_FILES['upfile']['tmp_name']; # アップロード一時ファイル $imgDir = 'img'; # 画像保存ディレクトリ $thumbnailDir = 'thumbnail'; # 画像のサムネイル保存ディレクトリ # まずファイルを移動 $destFilename = $imgDir . "/" . getFileId($filename); move_uploaded_file($tmpFilename, $destFilename) or die("Failed to upload $filename"); # 次にファイルをリサイズしてサムネイル用のディレクトリに保存する $thumbnailFilename = $thumbnailDir . "/" . getThumbnailFileId($filename); $width = 50; $height = 50; exec("convert -resize {$width}x{$height}! $destFilename $thumbnailFilename", $result, $status); ($status == 0) or die "Failed to create thumbnail image \n"; # # 保存するファイル名をココで変更する # function getFileId($name) { return $name; } # # 保存するサムネイルファイル名をココで変更する # function getThumbnailFileId($name) { return $name; } ?> <html> <head><title>画像アップロードテスト</title></head> <body> 元画像<img src="<?php echo $destFilename ?>" /> サムネイル<img src="<?php echo $thumbnailFilename ?>" /> </body> </html>
フローとしては
1.オリジナルイメージとしてデータを受け取る
(例:「ほげほげ.jpg」という1024*768サイズのJPG画像)
2.指定された画像サイズに変換する
(例:240*320として保存したいので、サイズを変更する(拡大縮小・トリミングなど))
3.サーバ上に保存する際に、名前を変えて保存する
(例:「ほげほげ.jpg」を「hoge01.jpg」という名前で保存する)
って形で実現できると思います。
if(isset($_POST["test"]))
{
$updir = "./pic/";
// これはUPされたファイルのオリジナルのファイル名
//$filename = $_FILES['upfile']['name'];
// ↑これを利用しないで好きな名前に書き換えればOKです
$filename = "hoge.jpg";
// 保存先
move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename) ;
echo "データのアップロードが完了しました。";
}
サイズ変更は「imagecopyresampled」を調べてみてください。
http://www.phppro.jp/phpmanual/php/function.imagecopyresampled.h...
参考ソースとして以下の通り。
// 保存先
$path = "tmp/"; // 元の保存先
$img_name = "ほげほげ.jpg"; // 元のファイル名
$save_path = "tmp2/"; // 保存先
$save_name = "hoge01.jpg"; // 保存名
$change_size = 240; // 保存したい画像の横幅
// サイズ変更
$normal = getimagesize($path.$img_name);
$ratio = $change_size / $normal[0];
$small[0] = floor( $normal[0] * $ratio );
$small[1] = floor ( $normal[1] * $ratio );
// JPG読込
$img_src = imagecreatefromjpeg($path.$img_name);
// 空の画像作成
$new_src=imagecreatetruecolor($small[0],$small[1]);
// 画像の保存
imagecopyresampled($new_src,$img_src,0,0,0,0,
$small[0],$small[1],
$normal[0],$normal[1]);
// JPG保存
imagejpeg($new_src,$save_path.$save_name);
ご回答ありがとうございます。
画像のリサイズ等の処理はImageMagickを使うと簡単かつ色々出来ます。
http://mechanics.civil.tohoku.ac.jp/soft/node43.html
またImageMagickはphp用にimagickというインターフェースが存在しています。
少しインストールが手間ですが、ソースコードは綺麗になりますので、
こちらを使った方が望ましいです。
http://php.benscom.com/manual/ja/book.imagick.php
サンプルを書いてみました。環境が解らないのでimagickは使用していません。
<?php /** * 画像ファイルのアップロードテスト * * サーバに画像をアップロードして、サムネイルの作成を同時に行います。 * このスクリプトの置かれているパスにimg, thumbnailの両ディレクトリが * 書き込み権限がある状態で存在している事を想定しています。 */ # var_dump($_FILES); isset($_FILES['upfile']) or die("no uploaded file \n"); $filename = $_FILES['upfile']['name']; # アップロードされたファイルの元々の名前 $tmpFilename = $_FILES['upfile']['tmp_name']; # アップロード一時ファイル $imgDir = 'img'; # 画像保存ディレクトリ $thumbnailDir = 'thumbnail'; # 画像のサムネイル保存ディレクトリ # まずファイルを移動 $destFilename = $imgDir . "/" . getFileId($filename); move_uploaded_file($tmpFilename, $destFilename) or die("Failed to upload $filename"); # 次にファイルをリサイズしてサムネイル用のディレクトリに保存する $thumbnailFilename = $thumbnailDir . "/" . getThumbnailFileId($filename); $width = 50; $height = 50; exec("convert -resize {$width}x{$height}! $destFilename $thumbnailFilename", $result, $status); ($status == 0) or die "Failed to create thumbnail image \n"; # # 保存するファイル名をココで変更する # function getFileId($name) { return $name; } # # 保存するサムネイルファイル名をココで変更する # function getThumbnailFileId($name) { return $name; } ?> <html> <head><title>画像アップロードテスト</title></head> <body> 元画像<img src="<?php echo $destFilename ?>" /> サムネイル<img src="<?php echo $thumbnailFilename ?>" /> </body> </html>
ご回答ありがとうございます。
ご回答ありがとうございます。