jQueryを使用して画像アップロード時にサムネイルを表示する方法

このQ&Aのポイント
  • jQueryを使用して画像がアップロードされた際に、サムネイルを表示する方法をご紹介します。
  • 画像のアップロードボタンのchangeイベントを監視し、アップロードされた画像をサーバーに送信します。
  • サーバー側で画像の処理を行い、サムネイル画像を生成し、それをレスポンスとしてクライアントに返します。クライアント側では、レスポンスを受け取って画像を表示します。
回答を見る
  • ベストアンサー

サムネイルを表示したい

画像のアップロードで「参照」をクリックして画像を選ぶとサムネイルが表示されるものを作りたいです。 $(function($) { $('input:file').change(function(){ $.ajax({ url: 'thumb.php', data: { name: "John" }, }).done(function(data){ alert(data); }).fail(function(data){ alert('error!!!'); }).always(function(){ // 通信終了 }); }); }); こんな風に書いてみました。 テキストはphpで受け取れましたが画像はセキュリティ上無理なのですね^^; そこで調べてみるとこちらの方法があるようなのですが、 http://molaovo.hatenablog.jp/entry/20130111/1357913239 送信した時にではなく、changeイベントで動かすにはどうすればいいでしょうか? 画像は複数アップロードするので、1つずつ処理を行いたいです。

  • dcx147
  • お礼率33% (214/636)

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

  • ベストアンサー
回答No.1

もともと、Javascriptでは、ローカルのファイルにアクセスできなかったはずですが、 HTML5では、File APIでできるようになったらしいです。 これを使うと、ローカルの画像ファイルが選択された時点で(アップロードする前に) サムネイル表示することもできるようです。 ご参考 http://www.html5rocks.com/ja/tutorials/file/dndfiles/

関連するQ&A

  • 画面移遷なしで画像アップロード&サムネイル表示

    画像をアップロードするフォームで、 アップロードする画像を選択→画面移遷なしでアップロード→サムネイルを動的表示 というようにしたいのですが、うまくいきません。 以下のjQueryプラグインが希望の動作に近そうなのですが、詳しい設置方法がわかりません。 http://www.ideaxidea.com/archives/2010/03/ajax_upload.html とりあえず、サンプルにならって、jQueryとajaxupload.jsを読み込んで、以下のように設置してみましたがサムネイルが表示されません。 アドバイスをいただけると助かります。 ヘッダーに↓ <script type="text/javascript"> $(document).ready(function(){ var thumb = $('img#thumb'); new AjaxUpload('imageUpload', { action: $('form#newHotnessForm').attr('action'), name: 'image', onSubmit: function(file, extension) { $('div.preview').addClass('loading'); }, onComplete: function(file, response) { thumb.load(function(){ $('div.preview').removeClass('loading'); thumb.unbind(); }); thumb.attr('src', response); } }); }); </script> bodyに↓ <h2>New Hotness</h2> <div class="column-row"> <div class="seven columns"> <div class="preview"> <img id="thumb" width="100px" height="100px" src="/img/hoge.png" /> </div> <span class="wrap hotness"> <form id="newHotnessForm" action="/post.php"> <label>Upload a Picture of Yourself</label> <input type="file" id="imageUpload" size="20" /> <button type="submit" class="button">Save</button> </form> </span> </div> </div>

    • ベストアンサー
    • AJAX
  • サムネイル画像が表示されない

    以前質問しましたがもう一度お願いします。 HPビルダー7 でサムネイル画像の大きい画像がネット上で表示されません。(プレビューでは表示されます。)ISPのぷららに聞くとアップロードされてないらしいのですが、ソフトの問題なのでそれ以上答えてくれません。ちなみに、HTMLソースは <TD align="center" valign="middle" width="128" height="128"><A href="IMG_0597.JPG"><IMG src="IMG_0597_thumb.JPG" width="128" height="96" border="1"></A></TD> です。なぜ、小さい画像をクリックしても大きい画像が表示されないか分かりません。なにかヒントでもいいですからお願いします。

  • サムネイルの取り扱いについて

    PHP+MYSQLで、画像掲示板を作っています。 画像のサムネイルを表示させたいのですが、サムネイルの取り扱い方を教えてください。 ちょっと、考えたところ、 (1)アップロード時に、元の画像ファイルを保存した後、サムネイルの画像ファイルを作成して保存する。 サムネイル表示の際は、サムネイル用の画像をそのまま呼び出す。 (2)元画像のみを保存しておき、サムネイルを表示させる場合は、元画像からサムネイルに変換して表示させる。 の二つの方法が思いつきましたが、 一般的には、どちらを使うのでしょうか? 処理速度を考えて、(1)の方が良いかと思うのですが。。。 あと、(1)の処理を行う場合、サムネイル作成スクリプトのサイトがあれば、教えてください。

    • ベストアンサー
    • PHP
  • phpに値が送られない

    PHP側に値が送られなくて困ってます!! どなたか助けて頂けないでしょうか $(function() { $('a') .click(function() { var id = this.id; alert(id); $.ajax({ type: 'POST', dataType:'json', url:'editor_text.php', data:{ item:id }, success:function(data) { alert(data); }, error:function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); } }); }); });

    • ベストアンサー
    • AJAX
  • jqueryのAJAXで通信が完了した時のアラートをLightbox風

    jqueryのAJAXで通信が完了した時のアラートをLightbox風に表示したい。 コード <script type="text/javascript"> //<![CDATA[ $(function(){ $('#exebtn').click(function() { $.ajax({ type: "post", url : "sendmail.php", data : { message: $('#message').val(), exebtn:$('#exebtn').val()}, datatype:'text', //ここの部分をどう変えれば出来るのでしょうか? success: function(data) { if(data != ''){ alert(data); }}, }); }); }); //]]> </script> ご教授、宜しくお願い致します。

    • ベストアンサー
    • AJAX
  • 現在地の取得について

    現在地の座標を取得するために下記のようにしています。 「var」をつけなければグローバル変数になるようなので関数外に宣言していますが 結果はundefinedになります。 PHPでいうところのセッションのように関数をまたいで変数を使いたいのですが どうすればいいのでしょうか? myLatlng = 'ダミー'; function loadXml( url ) { $.ajax({ url: url, type: 'GET', dataType: 'xml', timeout: 5000, }).done(function( xml ){ myLatLng = geoLocate(); alert(myLatLng);//undefined parseXml( xml ); }).fail(function( xml ){ alert( '読み込みに失敗しました' ); }); } function geoLocate() { var position_options = { enableHightAccuracy: true }; navigator.geolocation.watchPosition( success, fatal, position_options ); function success( position ) { return new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); } function fatal( error ) { alert( '位置情報の取得に失敗しました' ); return null; } }

  • 【jQuery】 changeが検出できない

    間違いがあったため、投稿しなおしです。 MySQL + PHP + javascript with jQuery でプログラムを作成しています。 $.ajaxでPHPを呼び出し、以下のようなinputを書き出しました。 <input id="hoge" onchange="alert('hogehoge')" type="hidden" value="foo" / > その後、以下のようにjsで値の変更を行いましたが、changeイベントが検出できません。 $("#hoge").val("hogehoge");//アラートが出ない 変更後、すぐにアラートが出るようなイメージでいたのですが、アラート自体が出ません・・・ inputに直にonchangeを書いているのがマズイのかな、と思い、以下のように変更もしてみましたが、やはりダメでした。 $("#hoge").livequery("change",function(){ alert("hogehoge"); }); $("#hoge").val("hogehoge");//やはりアラートが出ない プログラムから変更されたval()は、イベントとして取得できないのでしょうか。 なぜ取得できないのか、またそもそも出来ないのなら何か方法はないか、ご存じの方お願い致します。

  • ajaxのレスポンスが取得できない。

    環境【cakePHP2.X, PHP5.5】 cakephpでajaxを試みてますがうまくいきません。 あるサンプルを参考にして ボタンのクリックをトリガに ajaxMethod()を走らせて alertで"tanaka"を表示させたいのですが なぜかOeders/index.ctpのhtmlを 取得し、長々と表示されてしまいます。 意図した結果を取得できるよう アドバイスを戴けたら嬉しいです。 よろしくお願いします。 【OrdersController.php】 class OrdersController extends AppController { function index() { //初期表示処理 } /** * Ajax用関数 */ function ajaxTest() { $this->autoRender = FALSE; if($this->request->is('ajax')) { return $this->data['name']."さん、こんにちは"; //echoでもOK } } } 【add.ctp】 function ajaxMethod() { $.ajax({ url: "Orders/ajaxTest", type: "POST", data: { name : "tanaka" }, dataType: "text", success : function(response){ //通信成功時の処理 alert(response); }, error: function(){ //通信失敗時の処理 alert('通信失敗'); } }); }

  • 【jQuery】サムネイル

    3つのサムネイル画像(.thumb)があります。 クリックした.thumbはopacityを1に、その他は0.5に切り替わる する方法を教えてください。 始めは1番目.thumbのopacityは1でお願いします。 ■html <div id="ph-wrap"> <div id="photo"> <p><img src="./img/photo1.png" width="480" height="320" alt="" /></p> <p><img src="./img/photo2.png" width="480" height="320" alt="" /></p> <p><img src="./img/photo3.png" width="480" height="320" alt="" /></p> </div> <div id="thumb-wrap"> <p class="thumb"><img src="./img/photo1.png" width="120" height="80" alt="" /></p> <p class="thumb"><img src="./img/photo2.png" width="120" height="80" alt="" /></p> <p class="thumb"><img src="./img/photo3.png" width="120" height="80" alt="" /></p> </div> </div> ■CSS(一部抜粋) #thumb-wrap{ float:left; margin:0 0 0 10px; padding:0; width:120px; } #thumb-wrap img{ width:120px; height:80px; cursor:pointer; opacity:0.5; -moz-opacity:0.5; /* Firefox */ filter: alpha(opacity=50); /* IE */ } .opc{ opacity:1.0; -moz-opacity:1; /* Firefox */ filter: alpha(opacity=100); /* IE */ } ■jQuery $(function () { var photoImg = "#photo img" var thumbWrapImg = "#thumb-wrap img" $("#photo p:gt(0)").hide(); $(thumbWrapImg).eq(0).css({"opacity":1}); $(thumbWrapImg).click(function () { $(this).animate({"opacity":1},100); $(photoImg).attr("src",$(this).attr("src")); }); });

  • HTML5 File APIを利用したサムネイル

    画像アップロード前に画像サムネイルのHTML5 File APIします。参考サイトでは理解できましたが、以下のソースにおいて、class=img**で指定した場所にサムネイル表示するにはどうしたらよいのでしょうか? <img src="ここに画像1" class="img_01">あるいは<span class="img01">ここに画像1</span> <form enctype="multipart/form-data" method="post"> <p><img src="ここに画像1" class="img_01"><input type="file" name="userfile_01"></p> <p><img src="ここに画像2" class="img_02"><input type="file" name="userfile_02"></p> <p><img src="ここに画像3" class="img_03"><input type="file" name="userfile_03"></p> </form> 以下のfunction内の書き方がわかりません。 $(function() { $('input[type=file]').after('<span></span>'); // アップロードするファイルを選択 $('input[type=file]').change(function() { var file = $(this).prop('files')[0]; // 画像以外は処理を停止 if (! file.type.match('image.*')) { $('span').html(''); return; } // 画像表示 var reader = new FileReader(); reader.onload = function() { var img_src = $('<img>').attr('src', reader.result); $('span').html(img_src); } reader.readAsDataURL(file); }); }); 参考URL http://php.o0o0.jp/article/jquery-preview_thumbnail

専門家に質問してみよう