2017-12-13 6 views
0

私は訪問者のウェブカメラから画像をキャプチャしたいウェブページを作成しようとすると、奇妙な問題が発生します。 2つのdivの間にボタンがあり、2つ目のdivのキャンバスでボタンがクリックされたときに、最初のdivのWebカメラストリームのコンテンツが描画されます。キャンバス:drawImageでストリームをキャプチャすると、ストリーム画像の左上隅のみがキャプチャされます

問題は、ストリームの画像がクリップされているように見えることです。左上隅のみがキャプチャされているようです。キャンバスのディメンションとそれを含んでいるdivで無駄に試してみました。キャンバスを画像として保存すると、この問題は解決されません。

<!doctype html> 
 
<html> 
 
    <head> 
 
     <meta charset="utf-8" /> 
 
     <title>Webcam test</title> 
 

 
     <style> 
 
      #picturecontaienr { 
 
       width: 800px; 
 
       height: 800px; 
 
      } 
 
      #takenpicture { 
 
       width: 750px; 
 
       height: 750px; 
 
       margin: 0%; 
 
       padding: 0%; 
 
      } 
 
     </style> 
 
    </head> 
 
    <body> 
 
     <h1>Webcam test!</h1> 
 
     <div id="webcamcontainer"> 
 
      <video width="500" height="500" autoplay="true" id="webcamstream"> 
 
      </video> 
 
     </div> 
 
     <button id="takepicture">Take picture!</button> 
 
     <div id="picturecontainer"> 
 
      <canvas id="takenpicture"> 
 
      </canvas> 
 
     <script> 
 
      var video = document.getElementById ("webcamstream"); 
 

 
      navigator.getUserMedia = (navigator.getUserMedia || 
 
             navigator.webkitGetUserMedia || 
 
             navigator.mozGetUserMedia || 
 
             navigator.msGetUserMedia || 
 
             navigator.oGetUserMedia); 
 
      if (navigator.getUserMedia) { 
 
       navigator.getUserMedia ({video:true}, function (stream) { 
 
        video.src = window.URL.createObjectURL (stream); 
 
       }, function () { 
 
        document.getElementById ("videocontainer").innerHTML += "<p>You did not give permission to take a picture of your QR code!</p>"; 
 
       }); 
 
      } 
 

 
      document.getElementById ("takepicture").addEventListener ("click", function () { 
 
       var drawingContext = document.getElementById ("takenpicture").getContext ("2d"); 
 
       
 
       drawingContext.drawImage (video, 0, 0, 500, 500); 
 
    
 
       //var imageSource = document.getElementById ("takenpicture").toDataURL ("image/png"); 
 
       //alert (imageSource); 
 
      }); 
 
      
 
     </script> 
 
    </body> 
 
</html>

誰かが正しい方向に私を指すことができれば、私は非常に感謝される:ここで

は、私はそれがこの問題を持って作られたテストページです。事前に

おかげで、 ジョシュア

+0

問題を修正しました。問題は、CSSでキャンバスの幅と高さを定義しようとしたことですが、これはうまくいかないようです(キャンバスはCSSのサイズに関係なくデフォルトのサイズのままです)。キャンバスタグの属性として幅と高さを設定することをお勧めします。 また、キャンバスの幅と高さがdrawImage呼び出しの4番目と5番目のパラメータと一致していることを確認してください。 –

答えて

0

まず、タイプミス:あなたのCSSの#picturecontaienrがあなたのhtmlで<div id="picturecontainer">と一致する必要があります。

編集:ここには次元が実際に小さくなるはずですが、私が意味することを示すPlunkerがあります。これを手伝ってくれるかどうかを確認してください。 https://embed.plnkr.co/efHNA5SgLenSc0dyEgDE/ (私はplunkerで使用するソースコードや画像のためのW3schools.com TO CREDIT!)

私はキャンバスを経験していないことだし、コメントする担当者を持っていないが、これは潜在的な原因である。drawingContext.drawImage (video, 0, 0, 500, 500);セット画像の開始点左上隅(0,0)にして、エンドポイント(500、500)に、まだあなたのキャンバスは次のとおりです。

#picturecontaienr {width: 800px; height: 800px;} 
#takenpicture {width: 750px; height: 750px; margin: 0%; padding: 0%;} 

したがって画像は、理論的に500で終了します、キャンバスの中央にある500私の推測では、ウェブカメラは、撮影された画像と同じ解像度で描画しようとしています。これは、カムのデフォルトの画像解像度に応じて大きくなる可能性があります。違いがあるかどうかを確認するためにdrawingContext.drawImage (video, 0, 0, 1000, 1000);を設定してみてください。

div/canvasを大きくしたくない場合は、overflow: auto;をCSSの内側に貼り付けて、同じサイズにしておきますが、画像が大きすぎる場合は少なくともスクロールバーが表示されます。

これが手伝ってくれたら教えてください!

関連する問題