麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > HTML > 正文

video結合canvas實現視頻在線截圖功能

2024-08-26 00:20:47
字體:
來源:轉載
供稿:網友

給大家講解下我前幾天看到的一個有趣小demo:視頻在線截圖。以下是我修改和添加了新功能后的效果圖:

video,canvas,視頻,截圖

是不是很酷,其實挺簡單的,下面就給大家講講怎么弄哈。

這里主要分為三大塊功能,首先是第一個:

利用URL對象獲取視頻鏈接并展示:

js的URL對象有個 createObjectURL 方法,它可以獲取一個文件(File對象)的url,然后插入到 video 元素的 src 特性中,這樣就可以實現視屏的展示了。當然如何獲取File對象呢,方法有種,比如使用input元素,或者使用拖動的方式。一個完整的代碼段:

<input type="file"/>document.querySelector('input[type="file"]').addEventListener('change',function () {    document.querySelector('video').src = window.URL.createObjectURL(this.files[0])})

當然源碼中我并不是這樣寫的,僅僅是為了給大家一個演示而已。關于URL更加具體的使用,大家可以看看這篇文章或者MDN。

利用canvas實現視頻截圖:

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

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

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

實現動畫效果:

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

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;}

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

下面的代碼便是創建大圖片和小圖片并實現動畫效果了。為了方便易懂,我這兒使用了JQuery

var $imgBig = $("<img/>");//設置大圖片的初始位置,就是原視頻處。$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();//獲取小圖片的距離參數,實現大圖片的動畫效果。var offset = getOffset($img[0]);//添加動畫效果$imgBig.animate({    left: offset.x + "px",    top: offset.y + "px",    width: $img.width() + "px",    height: $img.height() + "px"}, 500, function () {    $img.show();    $imgBig.remove();});

 

恩恩,主要的代碼部分到這就講完啦,當然具體的實現還有很多細節上的問題以及其他的功能可能沒有展示,我就不一一說明了,具體的大家看完源碼后可以再提問。

下面是我的源碼地址,大家可以試試哈:

在github上的demo

總結

以上所述是小編給大家介紹的video結合canvas實現視頻在線截圖功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲一二区视频 | 热re91久久精品国产99热 | 亚洲精品无码不卡在线播放he | 中文字幕在线播放视频 | 综合精品 | 青青草免费观看完整版高清 | 成人一区二区在线观看视频 | 九九热精品视频在线免费观看 | 国产精品久久久久网站 | 亚洲精品久久久久www | 国产一级做a爰片在线看 | h视频在线免费观看 | 欧美成人三级视频 | 欧美大穴 | 国产精品视频1区 | 激情视频在线播放 | 精品一区二区三区电影 | 成人毛片视频免费看 | 伊人在线| 欧美第1页| 一级免费特黄视频 | 久久影院在线观看 | 国产一区二区免费在线观看 | 美女久久久久久久久 | 欧美日韩免费一区二区三区 | av免费在线播放网址 | 激情久久一区二区 | 91九色电影 | 最新欧美精品一区二区三区 | 国产成人在线网站 | 欧美精品久久久久久久久久 | 福利在线小视频 | 亚洲电影在线播放 | 美女视频黄a视频免费全过程 | 黄污视频在线看 | 欧美h版电影在线观看 | 欧美一极视频 | 亚洲最新黄色网址 | 欧美一级片一区 | 国产成人av一区 | 国产69精品久久99不卡免费版 |