怎么在video中使用canvas截圖視頻-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)怎么在video中使用canvas截圖視頻,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的福綿網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

利用canvas實(shí)現(xiàn)視頻截圖:

接下來就是關(guān)鍵步驟了,但也很簡單,那就是使用 canvas 的 drawImage 方法,大家如果翻到高程三的第15.2.6節(jié),就會(huì)發(fā)現(xiàn) drawImage 的方法的使用描述得非常詳細(xì),但漏講了一個(gè),那就是 video 元素也可傳入 drawImage 方法中,并且繪制圖形。具體代碼段:

var canvas = document.createElement("canvas");
var canvasCtx = canvas.getContext("2d");
var video=document.querySelector('video');
//坐原圖像的x,y軸坐標(biāo),大小,目標(biāo)圖像的x,y軸標(biāo),大小。
canvasCtx.drawImage(video, 0, 0, videoWidth, videoHeight, 0, 0, imgWidth, imgHeight);
//把圖標(biāo)base64編碼后變成一段url字符串
var dataUrl = canvas.toDataURL("image/png");
//插入圖片得src特性中
document.createElement('img').src=dataUrl;

繪制完成圖像后,再調(diào)用 canvas 的 toDataURl 方法把圖像變成 base64 編碼的url,就可插入到 img 元素中展示,一個(gè)縮略的圖的制作便完成了。關(guān)于圖片和base64的關(guān)系,具體的同學(xué)們可以看下這篇文章。

實(shí)現(xiàn)動(dòng)畫效果:

該動(dòng)畫實(shí)現(xiàn)的主要原理是:先在視頻原處創(chuàng)建一張大小和視頻一致的大圖片,設(shè)置為絕對布局( position:absolut ),在實(shí)際放置縮略圖處創(chuàng)建一張小圖片,設(shè)置為不可見( visibility:hidden ),然后大圖片通過 left 和 top 實(shí)現(xiàn)位移, width 和 height 實(shí)現(xiàn)縮小,至實(shí)際放置縮略圖處,并形成動(dòng)畫效果。最后大圖片刪除,小圖片顯示即可。具體代碼段:

function getOffset(elem) {
    var pos = {x: elem.offsetLeft, y: elem.offsetTop};
    var offsetParent = elem.offsetParent;
    while (offsetParent) {
        pos.x += offsetParent.offsetLeft;
        pos.y += offsetParent.offsetTop;
        offsetParent = offsetParent.offsetParent;
    }
    return pos;
}

該函數(shù)是獲取小圖片距viewport(視口)的距離,并提供給大圖片作為位移參數(shù)的,高程三的12.2.3節(jié)有段幾乎一模一樣的代碼,并附有詳細(xì)說明,以及替代方案 getBoundingClientRect 函數(shù)也有提到,具體的大家翻書看看哈。

下面的代碼便是創(chuàng)建大圖片和小圖片并實(shí)現(xiàn)動(dòng)畫效果了。為了方便易懂,我這兒使用了JQuery

var $imgBig = $("<img/>");
//設(shè)置大圖片的初始位置,就是原視頻處。
$imgBig.css({
    position: "absolute",
    left: video.offsetLeft,
    top: video.offsetTop,
    width: video.offsetWidth+ "px",
    height: video.offsetHeight+ "px"
}).attr("src", dataUrl);
var $img = $("<img/>");
$img.hide();
//獲取小圖片的距離參數(shù),實(shí)現(xiàn)大圖片的動(dòng)畫效果。
var offset = getOffset($img[0]);
//添加動(dòng)畫效果
$imgBig.animate({
    left: offset.x + "px",
    top: offset.y + "px",
    width: $img.width() + "px",
    height: $img.height() + "px"
}, 500, function () {
    $img.show();
    $imgBig.remove();
});

關(guān)于怎么在video中使用canvas截圖視頻就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

分享文章:怎么在video中使用canvas截圖視頻-創(chuàng)新互聯(lián)
瀏覽地址:http://muchs.cn/article22/csjijc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、用戶體驗(yàn)、品牌網(wǎng)站建設(shè)網(wǎng)站改版、Google網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)