LoginSignup
4
8

More than 5 years have passed since last update.

ブラウザに画像ファイルをドラッグアンドドロップして表示

Last updated at Posted at 2017-10-26

ブラウザに画像ファイルをドラッグアンドドロップして表示

仕様

  • HTMLのドロップエリアに画像ファイルを落とすと、表示エリアに画像が表示される
  • テスト段階なので無駄がおおいかもしれないがとりあえず動く

ソース

HTML

test_8.htm
<html>
<head>
<link rel="stylesheet" type="text/css" href="test_8.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript" src="test_8.js"></script>
<title>test_8 ブラウザに画像ファイルをドラッグアンドドロップして表示</title>
</head>
<body>
<div id="droparea">ファイルをドロップしてください。</div>
<div id="viewarea">ここに表示</div>
</body>
</html>

CSS

test_8.css
#droparea,#viewarea{
border: gray solid 1em;
padding: 2em;
}

javascript

test_8.js
$(function() {
  $("#droparea").on({
    "dragenter dragover":function(e){
      e.preventDefault();
    },
    "drop":function(e){
      var file = e.originalEvent.dataTransfer.files[0];
      var fr1 = new FileReader();
      fr1.onload = function(e) {
        var blob=new Blob([e.target.result],{"type":file.type});
        var fr2 = new FileReader();
        fr2.onload = function(e) {
          var src=e.target.result;
          src=new Uint8Array(src);
          src=String.fromCharCode.apply("",src);
          src=btoa(src);
          src="data:"+file.type+";base64,"+src;
          $("<img>").attr({"src":src,"alt":file.name}).appendTo('#viewarea');
        }
        fr2.readAsArrayBuffer(blob);
      }
      fr1.readAsArrayBuffer(file);
      e.preventDefault();
    },
  });
});

検証

今後の調整課題

  • そもそもfilereaderは2ついるのか?
  • バイナリの中間形式に無駄はないのか?
  • サイズが大きなデータでメモリオーバーがおきないのか?

動作確認

各Windows版

  • IE11
  • Edge
  • Firefox56
  • Chrome62
4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8