画像リサイズアップロード

このQ&Aのポイント
  • 画像アップロードするプログラムを作成したのですが、元画像を指定したサイズ(アスペクト比を維持)させて画像をアップロードする方法を何度かトライしたのですが、経験浅く断念しています。
  • GDで処理させる方法がベストと思っていますが、下記のサンプルコードを手直しお願いしていただけるか、下記と同様な手順での処理方法に類似したサイトがあれば教えてください。
  • 処理の条件は、元画像を指定サイズでアスペクト比を維持した状態でリサイズし、元画像は削除するか、透過GIFも使えることです。その他のアドバイスもお待ちしています。
回答を見る
  • ベストアンサー

画像リサイズアップロード

画像アップロードするプログラムを作成したのですが、元画像を指定したサイズ(アスペクト比を維持)させて画像をアップロードする方法を何度かトライしたのですが、経験浅く断念しています。GDで処理させる方法がベストと思っていますが、下記のサンプルコードを手直しお願いしていただけるか、下記と同様な手順での処理方法に類似したサイトがあれば教えてください。 処理の条件 ・元画像を指定サイズでアスペクト比を維持した状態でリサイズ ・元画像は削除? ・透過Gifも使えるといいです。 ・その他アドバイス if(is_uploaded_file($img)){ $imagesize = getimagesize($img); switch($imagesize[2]){ case 1: $img_name = $code . ".gif"; break; case 2: $img_name = $code . ".jpg"; break; case 3: $img_name = $code . ".png"; break; default: unlink($img); } if($img_name){ $sendpath = $path.$img_name; if(move_uploaded_file($img, $sendpath)){ $img_name = $img_name; } } }

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.1

参考にどうぞ。 http://phpspot.org/blog/archives/2007/09/phppng.html 私は使ったことはありませんが、面倒なコーディングの手間が省けるかもしれません。

midorin_h
質問者

お礼

おそくなりました。ありがとうございます。

その他の回答 (1)

  • dell_OK
  • ベストアンサー率13% (740/5643)
回答No.2

私が以前作ったものを披露。 組み合わせるとこんな感じに。 ... if(move_uploaded_file($img, $sendpath)){ $img_name = $img_name; resize_image($sendpath); } } } ... function resize_image($image_file){ list($src_width,$src_height)=getimagesize($image_file); if ($src_width>280){ $resize_width = 280; $resize_height = $src_height * ( $resize_width / $src_width ); $image_src = imagecreatefromjpeg($image_file); $image_resize = imagecreatetruecolor($resize_width,$resize_height); imagecopyresized($image_resize,$image_src,0,0,0,0,$resize_width,$resize_height,$src_width,$src_height); imagejpeg($image_resize,$image_file); } } 私のはホームページ上に、横幅280ピクセルに統一したかったのでこうですが、 縦横率を維持するために、固定化される縦幅あるいは横幅を決める必要があります。 重要な処理はここ。 横幅を固定 $resize_width = 280; 高さ調節=元の高さ×(固定横幅÷元の横幅) $resize_height = $src_height * ( $resize_width / $src_width ); 「固定横幅÷元の横幅」 これが比率を保持する役目をはたします。 jpeg用なので、 imagejpeg($image_resize,$image_file); ここのところは分岐処理が必要かも。 アップロードされた画像ファイルが上書きされますので、 そこらへんはコピーするなどしてうまくしてください。 これでヒントになるかな。

関連するQ&A

  • スマートフォンから画像のアップロード

    スマートフォン用サイトで画像のアップロード機能を実装しようと思っています。 PCサイト用に作成したものをそのまま流用しようと思ったのですが、 うまくいきませんでした。 対応する画像はjpg,gif,pngの三種類です。 下記がPC用のソースです。 <form action="edit_url" method="POST" enctype="multipart/form-data"> <input type="file" name="Img" size="10"> </form> フォーム受け取り先で if(is_uploaded_file($_FILES['Img']['tmp_name'])){ //jpg,gif,png以外のファイルの場合はエラー if($_FILES['Img']['type'] != "image/pjpeg" AND $_FILES['Img']['type'] != "image/jpeg" AND $_FILES['Img']['type'] != "image/png" AND $_FILES['Img']['type'] != "image/gif"){ echo "エラー"; } } とすると「エラー」が表示されます。 $_FILES['Img']['type'] の中身を見ると 「application/octet-stream」 になっていました。 試してみた端末はandroid4.0の端末で、デフォルトブラウザを使用しました。 スマートフォンから画像をアップロードするには、 どのようにしたらよいのでしょうか。

    • ベストアンサー
    • PHP
  • 画像アップ

    php初心者です 簡単な画像アップロードを付けたいと思っています それでアップだけはなんとかできたのですが、もう少し機能を付けたいです 付けたい機能は 1.拡張子を調べて限定したい。gif、jpg、pngの三つを許可したい 2.画像の横と縦の幅が指定した幅より大きければ、指定した幅まで縦横比維持で縮小 100*100 3.もう一つのディレクトリに、小さいサムネイルを作りたい。大きさは32*32です 4.拡張子はそのままにして画像の名前をリネームしたいです よろしくお願いします(_ _ <?php $img_name = $_FILES["upfile"]["name"]; $img_size = $_FILES["upfile"]["size"]; $img_type = $_FILES["upfile"]["type"]; if($_REQUEST["up"] != ""){ if($img_tmp != "" and $img_size <= 50000){ $img_message = "名前は: $img_name <br>サイズは: $img_size <br>MIMEタイプは: $img_type"; if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) { if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) { chmod("files/" . $_FILES["upfile"]["name"], 0604); print $_FILES["upfile"]["name"] . "をアップロードしました。"; } else { print "ファイルをアップロードできません。"; } } else { print "ファイルが選択されていません。"; } }else{ $size_error = "サイズが大きすぎます"; } } ?> <html> <head> <title>画像アップロード</title> </head> <body> <form name="form" action="" method="POST" ENCTYPE="MULTIPART/FORM-DATA"> <input name="upfile" type="file" size="40"> <input name="up" type="submit" value="アップロード"><hr> </form> <?php print($size_error); ?><?php print($img_message); ?> </body> </html>

    • ベストアンサー
    • PHP
  • 同じファイル内で、アップロードとアップロードされたファイルの処理をすることについて

    OS:Window XP Pro 開発環境:Xampp(Apache + PHP + Mysql) 現在ファイルをアップロードする処理を書いているのですが、 この処理を 1)a.phpでファイルをアップロードする処理 2)b.phpでアップロードされたファイルの処理 と分けて、コーディングするのではなく 1)a.php内にファイルをアップロードする処理とアップロードされたファイルの処理を一緒に記述する という風にできないかと思いましたので、 以下のようなコードを書いたのですが $_FILES['upload_file']['tmp_name']) の値を調べてみたところ、なんの値も 入っていなかったことから このコードでは、二つの処理を一つのファイル内に書くことが でいないようでした。 どうにかしてひとつのファイル内に この二つの処理を同居させることはできないのでしょうか? a.php --------------------------------------- switch($action) { case "update": if(is_uploaded_file($_FILES['upload_file']['tmp_name'])) { $upload_file = $_FILES['upload_file']['tmp_name']); if(file_exists(dirname(__FILE__)."/profile_phote/") == TRUE) { $phote_name = dirname(__FILE__)."/profile_phote/".$upload_file; } else { mkdir(dirname(__FILE__)."/profile_phote/"); $phote_name = dirname(__FILE__)."/profile_phote/".$upload_file; } move_uploaded_file($_FILES['upload_file']['tmp_name'],$phote_name); "リダイレクト処理・・・" case ... case ... default: <form name="profile" action="" method="post"> <input type="file" name="upfile"> <input type="hidden" name="action" value="update"> </form> }

    • ベストアンサー
    • PHP
  • 画像アップロード時の複数パターンのリサイズ

    皆さんのお知恵をお貸し下さい。 現在PHPでアップロードした画像を処理していますが、 これを複数パターンのサイズ変更が出来なくて悩んでいます。 1つのファイルで 【width 280px height 430px】 【width 240px height 320px】 【width 170px height 200】 【width 60px height 60px 】 お手数ですがご教授して頂けると幸いです。 ※汚いコードで申し訳ございません。 PHP:5.2.17  サーバー:さくらインターネット up.php ------------ <?php if($_POST['id'] === ""){ echo 'ID Error'; exit(); } if($_POST['name'] === ""){ echo 'Name Error'; exit(); } if($id = $_POST['id']){ preg_match("/^[0-9]+$/",$id) or die('ID Error'); } //写真アップロード処理    for ($i = 0; $i < 4; $i++) { if ( $_FILES["upfile"]["size"][$i] === 0 ) { $img_filename[$i] = "no_image.jpg"; } else { $file_nm = $_FILES['upfile']['name'][$i]; $filename = $_FILES['upfile']['name'][$i]; $extension = pathinfo($file_nm, PATHINFO_EXTENSION); $tmpFilename = $_FILES['upfile']['tmp_name'][$i]; $imgDir = 'img'; $thumbnailDir = 'thumbnail'; list($width,$height)=getimagesize($_FILES['upfile']['tmp_name'][$i]); //ファイル名 $img_filename[$i] = $_POST['cast_id']."_$i". "." . $extension; # ファイルを移動 $destFilename = $imgDir . "/" . $img_filename[$i]; move_uploaded_file($tmpFilename, $destFilename) or die("Failed to upload $filename"); #画像比率 $new_width = 100; $rate = $new_width / $width; $new_height = $rate * $height; # 次にファイルをリサイズしてサムネイル用のディレクトリに保存する $thumbnailFilename = $thumbnailDir . "/" . $img_filename[$i]; exec("convert -resize {$new_width}x{$new_height}! $destFilename $thumbnailFilename", $result, $status); ($status == 0) or die ("Failed to create thumbnail image"); } $photo[$i] = $img_filename[$i]; } ?> よろしくお願い致します。

    • 締切済み
    • PHP
  • PHPで画像をアップロード&保存したいのですが..

    初心者です. ブラウザから画像をアップロードし保存できるようにしたく, サンプルを基に以下のようなソースを書いてみたのですが, 画像の保存ができません. もし直さなければいけないところがわかる人がいらっしゃいましたら ぜひ教えてください. よろしくお願いいたします. <?php $img_name = $_FILES["img_path"]["name"]; $img_size = $_FILES["img_path"]["size"]; $img_type = $_FILES["img_path"]["type"]; $img_tmp = $_FILES["img_path"]["tmp_name"]; if($_REQUEST["up"] != ""){ if($img_tmp != "" and $img_size <= 30000){ $img_message = "名前は: $img_name <br>サイズは: $img_size <br>MIMEタイプは: $img_type <br>一時的に保存されているパスは: $img_tmp <br>"; }else{ $size_error = "サイズが大きすぎます。ファイルサイズは30キロバイト以下です。"; } } $FilePath = "./img/".src.".".GetExt($img_name); move_uploaded_file($img_temp,$FilePath); //GetExt function GetExt($FilePath){ $f = strrev($FilePath); $ext = substr($f, 0, strpos($f,".")); return strrev($ext); } ?>

    • 締切済み
    • PHP
  • 画像をアップロードする度に古い画像を削除

    お世話になっております。 とあるサイトのソースを参考に画像のリアルタイムプレビューを作成しました。 画像を上げプレビューを表示することはできたのですが画像を上げる度に次々と表示される画像が増えてしまいます。 画像を新しく上げる場合は以前に入っていた画像を削除する、 もしくは最後に上げた画像のみをプレビュー表示する方法はありますでしょうか? unlinkを使用して削除を考えたのですが、 削除とアップロードの両立ができませんでした。 以下が使用しているソースになります。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>jQuery.uploadのサンプル</title> <script type="text/javascript" src="./js/jquery-1.7.1.min.js"></script> <script type="text/javascript" src="./js/jquery.upload-1.0.2.min.js"></script> <script type="text/javascript"> $(function() { $('#file_id').change(function() { $(this).upload('upload.php', function(res) { $(res).insertAfter(this); }, 'html'); }); }); </script> </head> <body> <style> .thumb { height: 200px; border: 1px solid #000; margin: 10px 5px 0 0; } </style> <input type="file" name="upload_file" id="file_id"> </body> </html> <?php #アップロードされたファイルが存在するか if ( !is_uploaded_file( $_FILES['upload_file']['tmp_name'] ) ) { echo '<div>ファイルが選択されていません。</div>'; exit(); } #$_FILES["upload_file"]["tmp_name"]がテンポラリにあるファイル名 #$_FILES["upload_file"]["name"]がアップロード元のファイル名 #tmpからファイルをコピー move_uploaded_file($_FILES["upload_file"]["tmp_name"], "files/" . $_FILES["upload_file"]["name"]); echo '<div>'.$_FILES["upload_file"]["name"].'をアップロードしました</div>'; echo '<img class="thumb" src="files/' . $_FILES["upload_file"]["name"] . '">' ?> どなたかご回答いただけましたら幸いでございます。 どうぞ宜しくお願いします。

    • ベストアンサー
    • PHP
  • アップロードした画像を表示するには

    アップロードした画像を表示したいと考えてます。アップロードは非同期 なので、アップロードを実行するchild.phpで画像表示の処理もして、アッ プロードの命令を出すparent.phpに画像の表示を行います。 ---- child.php(一部) ---- move_uploaded_file($_FILES["upload_file"]["tmp_name"], $image_name); echo '<img src="' . $image_name . '" width="100" height="100">'; これで成功します。ただ画像を常に同じ場所に表示したくechoの部分を以下 のように書き換えると失敗します。 echo '<script>'; echo 'document.getElementById("pict").src="' . $image_name . '.jpg";'; echo '</script>'; ---- parent.php(一部) ---- <img src="" id="pict"> クロームのDevToolsで調べるとElementsでは以下のようにsrcに何もなく失敗してます。 <img src id="pict"> ところがSourcesでは「Cannot set property 'src' of null」とエラーが出ているのに 以下のようにsrcには画像名は入ってます。 <script>document.getElementById("pict").src="./image1/bfbiD.jpg";</script> なお同名の画像はきちんとアップロードしてます。対策があれば教えてもら えないでしょうか。

    • ベストアンサー
    • CSS
  • ファイルアップロード aviファイルがUPできない!!

    質問させて下さい。 現在、会員制写真サイトを管理しております。 PHPにてファイルアップロードシステムを組み、UPできるファイル形式やサイズを制限しております。 抜粋ロジックは下記のようになります。 $mime_type = $_FILES['form_file']['type']; switch( $mime_type ) { case "image/gif": case "image/pjpeg": case "image/x-png": move_uploaded_file( $_FILES['form_file']['tmp_name'], $targetDIR.$_FILES['form_file']['name'] ); ~中略~ break; case "video/x-ms-asf": case "video/x-ms-wmv": case "video/x-msvideo": case "video/quicktime": case "video/mpeg": case "audio/x-pn-realaudio": case "application/x-shockwave-flash": move_uploaded_file( $_FILES['form_file']['tmp_name'], $targetDIR.$_FILES['form_file']['name'] ); ~中略~ break; default: メッセージ出力(うぷ出来ません。); break; } ※静止画と動画によってログファイルへの記録方法を分けています。 aviファイルのMIMEタイプは "video/x-msvideo" であると判断したのですが、複数のaviファイルでテストした結果、うぷ出来ませんとなってしまいました…。 テストしたファイルは、Divxエンコのものと、Windows内にあった、clock.avi というファイルです。 どのようにしたら aviファイルをうぷすることが出来るでしょうか? そもそも、MIMEタイプの指定が間違っているのでしょうか? ご教授頂けたら幸いです。

    • ベストアンサー
    • PHP
  • 画像のアップロード

    はじめまして。本を参考にphp4.3.11&MYSQLによる画像のアップロードについて勉強中の初心者です。 開発はレンタルサーバーで行っています。 画像のアップロードに関して下記プログラムを設定しているのですが、 エラーが表示されて画像のアップロードができません。 ■設定したitem2.php 内のソースです。 require( '../config.php' ); // 写真アップロード $path_parts = pathinfo( $_FILES['userfile']['name'] ); $uploadfile = $item_image_dir . $item_id . '.' . strtolower( $path_parts['extension'] ); if ( move_uploaded_file( $_FILES['userfile']['tmp_name'], $uploadfile ) ) { chmod( $uploadfile, 0777 ); $sql = "update item set image_url ='" . $item_image_url . $item_id . '.' . strtolower( $path_parts['extension'] ) . "' where item_id = '$item_id'"; $result = mysql_query( $sql ); } ■外部参照している../config.php 内の記述です。 $item_image_dir = '/var/www/****/htdocs/image/item/'; $item_image_url = '/image/item/'; ▼エラー内容です。 Warning: move_uploaded_file(home/****/public_html/image/item/0.gif) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/****/public_html/admin/item2.php on line 68 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpov0Fqr' to 'home/****/public_html/image/item/0.gif' in /home/****/public_html/admin/item2.php on line 68 image/itemのパラメータは777に設定しております。 どなたか原因お分かりになられる方がいらっしゃったらどうかお教え ください。ご不明な点などございましたら是非ご指摘ください。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ローカル環境でのアップロードテスト

    お世話になります。 is_uploaded_fileをローカル上でテスト行いたいのですがうまくいきません。(ファイルが空の状態です) 外部サーバでは正常にアップロードできます。 サーバまたはPHP側の設定でしょうか? マニュアル読むと、「クライアントマシン上での名前$_FILES['userfile']['name'] では動作しません。」とありますが この辺りが引っ掛かってるような・・・?? テスト用コード if ( ! is_uploaded_file($_FILES['upfile']['tmp_name'])) { $img_name = 'NO_FILE'; echo $img_name; exit(); } $_FILES['upfile']['error'])も試したのですがエラーコードも出力されません。 ローカル:WindowsXP、Apache 2.2.6、PHP 5.25 外部サーバ:Linux系、Apache 2.0、PHP 4.3.9

    • ベストアンサー
    • PHP

専門家に質問してみよう