34
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

html5 カメラ起動 capture属性について

Last updated at Posted at 2019-02-23

カメラ起動

input要素のtype属性がファイル・アップロード状態になっていて、そのaccept属性が指定されている場合に、capture属性 の項の規則が適用されます。

ユーザ向きカメラを用いて写真を撮影し、撮影された写真をHTMLフォームでアップロードする場合

<form action="server.cgi" method="post" enctype="multipart/form-data">
  <input type="file" name="image" accept="image/*" capture="user">
  <input type="submit" value="Upload">
</form>

周囲向きビデオ・カメラを用いて、動画をキャプチャーする場合

<form action="server.cgi" method="post" enctype="multipart/form-data">
  <input type="file" name="video" accept="video/*" capture="environment">
  <input type="submit" value="Upload">
</form>

より高度なユースケースの場合は、マークアップでcapture属性を指定

<input type="file" accept="image/*" capture>
<canvas></canvas>

XMLHttpRequestのスクリプトでファイル・アップロードを処理します

var input = document.querySelector('input[type=file]'); 

input.onchange = function () {
  var file = input.files[0];

  upload(file);
  drawOnCanvas(file);   
  displayAsImage(file); 
};

function upload(file) {
  var form = new FormData(),
      xhr = new XMLHttpRequest();

  form.append('image', file);
  xhr.open('post', 'server.php', true);
  xhr.send(form);
}

クライアント・サイドで画像編集を行うことを目的としている場合などには、画像をアップロードせずにクライアント・サイドに表示ができる

unction drawOnCanvas(file) {
  var reader = new FileReader();

  reader.onload = function (e) {
    var dataURL = e.target.result,
        c = document.querySelector('canvas'), 
        ctx = c.getContext('2d'),
        img = new Image();

    img.onload = function() {
      c.width = img.width;
      c.height = img.height;
      ctx.drawImage(img, 0, 0);
    };

    img.src = dataURL;
  };

  reader.readAsDataURL(file);
}

img要素を用いて画像の表示のみ

function displayAsImage(file) {
  var imgURL = URL.createObjectURL(file),
      img = document.createElement('img');

  img.onload = function() {
    URL.revokeObjectURL(imgURL);
  };

  img.src = imgURL;
  document.body.appendChild(img);
}
34
40
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
34
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?