<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ? ? ? 在HTML5規范的支持下,WebApp在手機上拍照已經成為可能。在下面,我將講解Web App如何用手機進行拍照,顯示在頁面上并上傳到服務器。 1、? 視頻流 ? ? ??HTML5 The Media Capture API提供了對攝像頭的可編程訪問,用戶可以直接用getUserMedia獲得攝像頭提供的視頻流。我們需要做的是添加一個HTML5的Video標簽,并將從攝像頭獲得視頻作為這個標簽的輸入來源(請注意目前僅Chrome和Opera支持getUserMedia。補充:請使用Opera支持HTML5的新版本,如果是Chrome,版本需為Chrome 18.0.1008+,并使用about:flags來開啟WebRTC,請看下圖)。 ![](image/d41d8cd98f00b204e9800998ecf8427e.png) ~~~ <video id="video" autoplay=""></video> <script> var video_element = document.getElementById('video'); if (navigator.getUserMedia) { // opera should use opera.getUserMedia now, chrome use webkitGetUserMedia navigator.getUserMedia('video',success, error); } function success(stream) { video_element.src =stream; } </script> ~~~ ![](https://box.kancloud.cn/2016-08-09_57a9a2df51464.jpg) 視頻流 2、? 拍照 ? ? ??拍照功能,我們采用HTML5的Canvas實時捕獲Video標簽的內容,Video元素能作為Canvas圖像的輸入,這一點很棒。主要代碼如下: ~~~ <script> var canvas =document.createElement('canvas'); var ctx = canvas.getContext('2d'); var cw = vw; var ch = vh; ctx.fillStyle = "#ffffff"; ctx.fillRect(0, 0, cw, ch); ctx.drawImage(video_element, 0, 0, vvw,vvh, 0,0, vw,vh); document.body.append(canvas); </script> ~~~ 3、? 圖片獲取 ? ? ??下面我們要從Canvas獲取圖片數據,其核心思路是用canvas的toDataURL將Canvas的數據轉換為base64位編碼的PNG圖像,類似于“data:image/png;base64,xxxxx”的格式。 ~~~ var imgData =canvas.toDataURL("image/png"); ~~~ ? ? ??因為真正圖像數據是base64編碼逗號之后的部分,所以我們實際服務器處理的圖像數據應該是這部分,我們可以用兩種辦法來獲取。 ? ? ??第一種:是在前端截取22位以后的字符串作為圖像數據,例如: ~~~ var data = imgData.substr(22); ~~~ ? ? ??如果要在上傳前獲取圖片的大小,可以使用: ~~~ var length = atob(data).length;// atob decodes a string of data which has been encoded using base-64 encoding ~~~ ? ? ??第二種:是在后端獲取傳輸的數據后用后臺語言截取22位以后的字符串。例如PHP里: ~~~ $image = base64_decode( str_replace('data:image/jpeg;base64,', '',$data); ~~~ 4、? 圖片上傳 ? ? ??在前端可以使用Ajax將上面獲得的圖片數據上傳到后臺腳本。例如使用jQuery時: ~~~ $.post('upload.php',{ 'data' : data } ); ~~~ ? ? ??在后臺我們用PHP腳本接收數據并存儲為圖片。 ~~~ function convert_data($data){ $image = base64_decode( str_replace('data:image/jpeg;base64,', '',$data); save_to_file($image); } function save_to_file($image){ $fp = fopen($filename, 'w'); fwrite($fp, $image); fclose($fp); } ~~~ ? ? ??請注意,以上的解決方案不僅能用于Web App拍照上傳,并且你可以實現把Canvas的輸出轉換為圖片上傳的功能。這樣你可以使用Canvas為用戶提供圖片編輯,例如裁剪、上色、涂鴉的畫板功能,然后把用戶編輯完的圖片保存到服務器上。 ![](https://box.kancloud.cn/2016-08-09_57a9a2df6801f.jpg) Canvas涂鴉功能 ? ? ? 在HTML5的驅動下,Web App與Native App之間是否還有不可逾越的鴻溝?我將會在3月23日百度開發者大會上現場來解答這個問題,敬請期待。 ? ? ??**相關規范:** ? ? ??The MediaCapture API:[http://www.w3.org/TR/media-capture-api/](http://www.w3.org/TR/media-capture-api/) ? ? ??Canvas:[http://dev.w3.org/html5/2dcontext/](http://dev.w3.org/html5/2dcontext/) ? ? ? **相關The Media Capture示例:** ? ? ??[Live Photo booth](http://html5-demos.appspot.com/static/getusermedia/photobooth.html) ? ? ??[Instant Camera](http://people.opera.com/danield/webapps/instant-camera/) ? ? ??原創文章,轉載請標明出處:[蔣宇捷的專欄](http://blog.csdn.net/hfahe)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看