国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Day19 - 攝像、拍照,濾鏡中文指南

chaos_G / 1836人閱讀

摘要:攝像拍照,濾鏡中文指南本文出自春哥個人博客作者黎躍春追時間的人簡介是推出的一個天挑戰。完整中文版指南及視頻教程在從零到壹全棧部落。這個新的對象表示指定的對象或對象。

Day19 - 攝像、拍照,濾鏡中文指南

本文出自:春哥個人博客
作者:?黎躍春-追時間的人
簡介:JavaScript30 是 Wes Bos 推出的一個 30 天挑戰。項目免費提供了 30 個視頻教程、30 個挑戰的起始文檔和 30 個挑戰解決方案源代碼。目的是幫助人們用純 JavaScript 來寫東西,不借助框架和庫,也不使用編譯器和引用。現在你看到的是這系列指南的第 19 篇。完整中文版指南及視頻教程在 從零到壹全棧部落。

效果圖


JS30天第19天挑戰的是如何調用攝像頭錄像、播放,如何捕捉視頻將其繪制canvas,還有拍照,以及濾鏡的制作。

運行項目

通過npm install安裝依賴包

通過npm start啟動服務器

瀏覽器直接訪問http://localhost:3000

liyuechun:19 - Webcam Fun yuechunli$ pwd
/Users/liyuechun/Documents/js30/JavaScript30-liyuechun/19 - Webcam Fun
liyuechun:19 - Webcam Fun yuechunli$ ls
README.md        package-lock.json    scripts.js
index.html        package.json        style.css
liyuechun:19 - Webcam Fun yuechunli$ npm install

> fsevents@1.1.2 install /Users/liyuechun/Documents/js30/JavaScript30-liyuechun/19 - Webcam Fun/node_modules/fsevents
> node install

[fsevents] Success: "/Users/liyuechun/Documents/js30/JavaScript30-liyuechun/19 - Webcam Fun/node_modules/fsevents/lib/binding/Release/node-v57-darwin-x64/fse.node" already installed
Pass --update-binary to reinstall or --build-from-source to recompile
npm WARN gum@1.0.0 No repository field.

added 411 packages in 5.921s
liyuechun:19 - Webcam Fun yuechunli$ npm start

> gum@1.0.0 start /Users/liyuechun/Documents/js30/JavaScript30-liyuechun/19 - Webcam Fun
> browser-sync start --server --files "*.css, *.html, *.js"

[Browsersync] Access URLs:
 --------------------------------------
       Local: http://localhost:3000
    External: http://192.168.1.116:3000
 --------------------------------------
          UI: http://localhost:3001
 UI External: http://192.168.1.116:3001
 --------------------------------------
[Browsersync] Serving files from: ./
[Browsersync] Watching files...
主要思路

獲取到瀏覽器的攝像頭的影像

將影像的記錄導出到canvas中

通過獲取canvas中的圖片信息,對圖片添加濾鏡

Browsersync 項目結構

了解Browsersync

省時的瀏覽器同步測試工具,Browsersync能讓瀏覽器實時、快速響應您的文件更改(html、js、css、sass、less等)并自動刷新頁面。更重要的是Browsersync可以同時在PC、平板、手機等設備下進項調試。您可以想象一下:“假設您的桌子上有pc、ipad、iphone、android等設備,同時打開了您需要調試的頁面,當您使用browsersync后,您的任何一次代碼保存,以上的設備都會同時顯示您的改動”。無論您是前端還是后端工程師,使用它將提高您30%的工作效率。

有了它,您不用在多個瀏覽器、多個設備間來回切換,頻繁的刷新頁面。更神奇的是您在一個瀏覽器中滾動頁面、點擊等行為也會同步到其他瀏覽器和設備中,這一切還可以通過可視化界面來控制。

獲取影像
function getVideo(){
    navigator.mediaDevices.getUserMedia({video:true,audio:false})
        .then(videostream => {
            console.log(videostream);
            video.src = URL.createObjectURL(videostream); // 創建url(creates  a URL for the specified object)
            video.play();
        })
        .catch((err) => {
            console.error("OH,Don"t have permission to use your local cam!",err);
        });
}

MediaDevices.getUserMedia()

MediaDevices.getUserMedia()方法提示用戶允許使用一個視頻和/或一個音頻輸入設備,例如相機或屏幕共享和/或麥克風。如果用戶給予許可,就返回一個Promise對象,MediaStream對象作為此Promise對象的Resolved[成功]狀態的回調函數參數,相應的,如果用戶拒絕了許可,或者沒有媒體可用的情況下,PermissionDeniedError或者NotFoundError作為此PromiseRejected[失敗]狀態的回調函數參數。注意,由于用戶不會被要求必須作出允許或者拒絕的選擇,所以返回的Promise對象可能既不會觸發resolve也不會觸發reject

URL.createObjectURL()。

URL.createObjectURL() 靜態方法會創建一個DOMString,其中包含一個表示參數中給出的對象的URL。這個URL 的生命周期和創建它的窗口中的document 綁定。這個新的URL對象表示指定的File 對象或Blob 對象。

canvas繪圖
function printToCanvas(){
    let width = video.videoWidth;
    let height = video.videoHeight;
    canvas.height = height;
    canvas.width = width; // 勿忘:設置canvas的寬和高
    console.log(width,height);
    return setInterval(() => {
        ctx.drawImage(video,0,0,width,height);

        // get the image data
        let imagedata = ctx.getImageData(0,0,width,height);
        // console.log(imagedata.data);

        // mess the image data
        // imagedata = redEffect(imagedata);
        // imagedata = rgbsplit(imagedata);
        // ctx.globalAlpha = 0.2;
        imagedata = greenScreen(imagedata);

        // put the image data back
        ctx.putImageData(imagedata,0,0);
    },16);
}

ctx.drawImage()

它能夠將當前的視頻流(video)中的一幀畫在canvas中。

getImageData()

ctx.getImageData()返回一個ImageData對象,用來描述canvas區域隱含的像素數據,這個區域通過矩形表示,起始點為(sx, sy)、寬為sw、高為sh。

putImageData()

ctx.putImageData():該方法是 Canvas 2D API 將數據從已有的 ImageData 對象繪制到位圖的方法。 如果提供了臟矩形,只能繪制矩形的像素。

imagedata信息

imagedata中有大量的數據,其中分別代表了圖片的顏色信息,分別為red,green,blue,alpha的值,因此我們可以同添加自定義濾鏡,通過改變顏色的rgba的值,控制頁面的效果。

攝像記錄導出到canvas中
function takePhoto(){
    // 播放音效
    snap.currentTime = 0;
    snap.play();
    
    // 獲取圖像數據
    let data = canvas.toDataURL("image/jpeg");
    // console.log(data);
    let link = document.createElement("a");
    link.href = data;
    link.setAttribute("downlond","handsome");
    link.innerHTML = `handsome`
    strip.insertBefore(link,strip.firstChild);
}

在沒次點擊照相的時候,都要求播一遍音效,并且為了模擬現實情況,我們在用戶點擊時,設置當前的播放時間為0,再播放音效。

canvas.toDataURL("image/jpeg");方法返回一個包含圖片展示的 data URI 。可以使用 type 參數其類型,默認為 PNG 格式。圖片的分辨率為96dpi。

接下來新建一個a元素,設置其href的值為data。在插入在文檔中。實現截圖成功的效果。

自定義濾鏡
// 紅色特效濾鏡
function redEffect(imagedata){
    for(let i = 0;i {
    levels[input.name] = input.value;
  });

  for (i = 0; i < pixels.data.length; i = i + 4) {
    red = imagedata.data[i + 0];
    green = imagedata.data[i + 1];
    blue = imagedata.data[i + 2];
    alpha = imagedata.data[i + 3];

    if (red >= levels.rmin
      && green >= levels.gmin
      && blue >= levels.bmin
      && red <= levels.rmax
      && green <= levels.gmax
      && blue <= levels.bmax) {
      // take it out!
      imagedata.data[i + 3] = 0;
    }
  }

  return imagedata;
}

這部分主要定義了三個濾鏡,由于我們通過ctx.getImageData可以獲取到頁面顏色的rgba的值,因此我們添加濾鏡的原理也是這樣,通過循環改變一張圖片中的所有rgba的值即可。

源碼下載

Github Source Code

全棧部落 區塊鏈部落

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/87151.html

相關文章

  • getUserMedia API及HTML5 調用手機攝像拍照

    摘要:失敗回調函數的參數,可能的異常有硬件問題用戶拒絕了當前的瀏覽器實例的訪問請求或者用戶拒絕了當前會話的訪問或者用戶在全局范圍內拒絕了所有媒體訪問請求。 getUserMedia API簡介 HTML5的getUserMedia API為用戶提供訪問硬件設備媒體(攝像頭、視頻、音頻、地理位置等)的接口,基于該接口,開發者可以在不依賴任何瀏覽器插件的條件下訪問硬件媒體設備。 getUserM...

    xiaokai 評論0 收藏0
  • getUserMedia API及HTML5 調用手機攝像拍照

    摘要:失敗回調函數的參數,可能的異常有硬件問題用戶拒絕了當前的瀏覽器實例的訪問請求或者用戶拒絕了當前會話的訪問或者用戶在全局范圍內拒絕了所有媒體訪問請求。 getUserMedia API簡介 HTML5的getUserMedia API為用戶提供訪問硬件設備媒體(攝像頭、視頻、音頻、地理位置等)的接口,基于該接口,開發者可以在不依賴任何瀏覽器插件的條件下訪問硬件媒體設備。 getUserM...

    李增田 評論0 收藏0
  • Day07 - Array Cardio 中文指南

    摘要:中文指南二作者簡介是推出的一個天挑戰。完整中文版指南及視頻教程在從零到壹全棧部落。第七天的練習是接著之前中文指南一的練習,繼續熟練數組的方法,依舊沒有頁面顯示效果,所以請打開瀏覽器的面板進行調試運行。 Day07 - Array Cardio 中文指南二 作者:?liyuechun 簡介:JavaScript30 是 Wes Bos 推出的一個 30 天挑戰。項目免費提供了 30 個...

    Forest10 評論0 收藏0

發表評論

0條評論

chaos_G

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<