人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPについて質問です。

現在写真データをアップロードするスクリプトを作成しようと考えております。

以下が現在作成途中段階のサイトです。

サイト:http://oskuni7.sakura.ne.jp/upload.php

このサイトに下記の機能を付け加えたいと考えております。

●アップロードするファイル名をPHPの中で変えてアップロードする。

●画像をPHPの中で指定したサイズに変更してアップロードする。

上記機能を追加するにはどのようなコードを付け加えればよろしいでしょうか?

お手数をおかけしますが、知っている方おりましたらよろしくお願いいたします。


●質問者: aiomock
●カテゴリ:コンピュータ インターネット
✍キーワード:PHP アップロード コード サイズ サイト
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● にんにん
●35ポイント

フローとしては

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);

◎質問者からの返答

ご回答ありがとうございます。


2 ● taichino
●35ポイント ベストアンサー

画像のリサイズ等の処理は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>
◎質問者からの返答

ご回答ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ