国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

get兩個js小技能——JS截取視頻第一幀&圖片轉(zhuǎn)Base64

這篇具有很好參考價值的文章主要介紹了get兩個js小技能——JS截取視頻第一幀&圖片轉(zhuǎn)Base64。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

背景

由于開發(fā)之前做的VisualDrag拖拽模板優(yōu)化的時候,拖拽進(jìn)去的圖片、視頻文件等需要進(jìn)行截圖作為封面,目前采用的截圖方法是htme2canvas,使用canvas進(jìn)行的截圖操作,所以就會遇到這樣的問題,視頻和圖片圖床簡單的使用標(biāo)簽加入canvas畫布里面無法正確的截圖成功。最后采取的措施就是將圖片轉(zhuǎn)為base64畫入canvas,將視頻截取第一幀圖片,然后畫進(jìn)canvas,最后進(jìn)行截圖,最后經(jīng)過折騰,這個方法好像成功了,寫這篇博客進(jìn)行記錄下。

JS截取視頻第一幀

截取視頻的第一幀作為視頻的封面是一個很常見的視頻上傳的做法。但這種做法一般會在上傳進(jìn)服務(wù)器時,在服務(wù)器進(jìn)行截圖了,這個操作方法在我之前的博客上有介紹過:https://qkongtao.cn/?p=560#h2-4

但是前端有時候為了避免浪費(fèi)服務(wù)器資源,可以在前端使用js直接進(jìn)行截圖了。

代碼如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js截取視頻第一幀</title>
</head>

<body>
    <div>
        <button onclick="cutImage()">截取視頻第一幀</button>
    </div>
    <div>
        <!-- 注意跨域畫布污染 -->
        <video width="640" height="480" src="https://upyun.qkongtao.cn/kodbox/%E8%A7%86%E9%A2%91/20221016134256839.mp4"
            controls="controls" id="fileVideo" crossorigin="anonymous">您的瀏覽器不支持視頻播放</video>
        <div>
            <p>視頻第一幀:</p> <img
                src="https://upyun.qkongtao.cn/kodbox/%E8%A7%86%E9%A2%91/upload.png?_upt=5b974ef11679068799"
                id="videoImg">
        </div>
    </div>


</body>


<script>
    function cutImage() {
        // 獲取音頻標(biāo)簽
        let video = document.getElementById('fileVideo')
        video.currentTime = 2 // 第一幀
        video.oncanplay = () => {
            let canvas = document.createElement("canvas");
            let ctx = canvas.getContext('2d') // 繪制2d
            canvas.width = video.clientWidth // 獲取視頻寬度
            canvas.height = video.clientHeight // 獲取視頻高度
            // 利用canvas對象方法繪圖
            ctx.drawImage(video, 0, 0, video.clientWidth, video.clientHeight)
            // 轉(zhuǎn)換成base64形式
            let imgUrl = canvas.toDataURL("image/png");
            console.log('imgUrl :>> ', imgUrl);
            document.getElementById("videoImg").src = imgUrl
        }
    }
</script>

</html>

效果如下:
js 獲取視頻第一幀,javacript,javascript,音視頻,前端

需要注意的地方是視頻資源跨域?qū)е庐嫴嘉廴镜膯栴},所以需要在video標(biāo)簽加上 crossorigin=“anonymous” 。
如果需要截圖第2幀以上則需要在video.oncanplay()方法中進(jìn)行截圖。

圖片轉(zhuǎn)Base64

在開發(fā)的很多場景中需要用到base64圖片形式進(jìn)行傳輸,這種一般會用在縮略圖的小文件圖片中,提高瀏覽器的流暢性。
當(dāng)然在canvas畫布中,當(dāng)進(jìn)行繪制圖片時,最好還是先將圖片img標(biāo)簽轉(zhuǎn)換為base64之后進(jìn)行drawImage(),避免畫布被污染和跨域等問題。

代碼如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>圖片轉(zhuǎn)Base64</title>
</head>

<body>
    <div>
        <button onclick="imgToBase64()">轉(zhuǎn)換成base64形式</button>
    </div>
    <img id="img" src="http://upyun.qkongtao.cn/chevereto/2022/10/28/20210917152407654.jpg" alt="" width="300">
    <p>轉(zhuǎn)換成base64形式</p>
    <div id="base64" style="word-break: break-all;"></div>
</body>

<script>
    function imgToBase64() {

        var src = document.getElementById("img").src
        getImageUrlBase64(src).then(
            (dataUrl) => {
                base64Url = dataUrl;
                console.log('base64Url :>> ', base64Url);

                document.getElementById("base64").innerHTML = base64Url
            }
        );
    }



    /**@url :圖片服務(wù)器上的url
     * @img :圖片url對應(yīng)的圖片
     * */
    function getImageUrlBase64(url) {
        return new Promise((resolve, reject) => {
            const img = new Image();
            img.crossOrigin = "anonymous"; //處理跨域
            img.src = url;
            img.onload = function () {
                const canvas = document.createElement("canvas"); //創(chuàng)建一個canvas元素
                canvas.width = img.width; //把當(dāng)前url對應(yīng)的圖片的寬度賦予canvas
                canvas.height = img.height; //把當(dāng)前url對應(yīng)的圖片的高度賦予canvas
                const ctx = canvas.getContext("2d");
                ctx.drawImage(img, 0, 0, canvas.width, canvas.height); //在畫布上一比一的畫出img
                const dataUrl = canvas.toDataURL("image/jpeg"); //調(diào)用canvas的toDataURL獲取.jpg的base64數(shù)據(jù)
                resolve(dataUrl);
            };
        });
    }
</script>

</html>

效果如下:
js 獲取視頻第一幀,javacript,javascript,音視頻,前端文章來源地址http://www.zghlxwxcb.cn/news/detail-526770.html

到了這里,關(guān)于get兩個js小技能——JS截取視頻第一幀&圖片轉(zhuǎn)Base64的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • js截取video視頻某一幀做封面的簡單案例

    可以使用 canvas 元素來截取視頻某一幀并生成封面。 首先,在 video ?標(biāo)簽上設(shè)置視頻源地址和自動播放屬性: 然后,在 canvas ?標(biāo)簽上定義寬高和樣式,并通過 JavaScript 獲取視頻元素和 canvas 元素: 接著,定義一個函數(shù)來截取視頻某一幀,并將其渲染到 canvas 上: 在需要生成

    2024年02月04日
    瀏覽(22)
  • JS 怎么獲取視頻第一幀作為封面圖?

    要獲取視頻的第一幀作為封面圖,你可以使用HTML5的 video 元素和 JavaScript 來實現(xiàn)。下面是一個簡單的步驟: 在HTML中,創(chuàng)建一個 video 元素,并設(shè)置視頻的路徑或URL: 在JavaScript中,獲取 video 元素的引用,并監(jiān)聽它的 loadedmetadata 事件(視頻元數(shù)據(jù)加載完成時觸發(fā)): 繼續(xù)在JavaS

    2024年04月10日
    瀏覽(22)
  • Java實現(xiàn)截取視頻第一幀

    Java實現(xiàn)截取視頻第一幀

    目錄 前言 一、通過Java借助第三方庫實現(xiàn) 1.引用ffmpeg 使用maven,導(dǎo)入pom依賴: ?工具類 2.引用jcodec 二、使用第三方存儲自帶的方法實現(xiàn)(如阿里云OSS、華為云OBS) 在實際項目中,會遇到上傳視頻后,需要截取視頻的首幀或指定幀為圖片,作為展示使用的需求。這個需求本身

    2024年02月06日
    瀏覽(22)
  • 前端截取視頻第一幀作為封面

    概述 1.做項目的時候突然想截取視頻第一幀,作為視頻的封面,然后搜了很多博客都發(fā)現(xiàn)得到空白的圖片,最后得到了解決。 2.方法:通過創(chuàng)建canvas標(biāo)簽,利用其drawImage() 方法在畫布上繪制該視頻,然后運(yùn)用toDataURL方法轉(zhuǎn)換canvas上的圖片為base64格式,并將base64格式的圖片作為

    2023年04月23日
    瀏覽(25)
  • vue實現(xiàn)截取視頻第一幀作為封面

    在Vue中實現(xiàn)截取視頻第一幀作為視頻封面可以通過以下步驟: 在Vue組件中引入video.js和videojs-contrib-hls插件。 在Vue組件中聲明一個video元素,并給其添加id。 在Vue組件中初始化video.js插件,并監(jiān)聽loadedmetadata事件。 編寫captureVideoThumbnail方法來截取視頻第一幀。 在Vue組件中使用

    2024年02月12日
    瀏覽(19)
  • 純前端播放文件流視頻并預(yù)覽并截取視頻第一幀

    1、把文件流轉(zhuǎn)為本地可以播放地址 調(diào)用 getFileURL 并傳入文件流會返回一個地址,將地址賦值給 video 的 src 即可播放視頻,無需上傳至服務(wù)器。 2、截取視頻第一幀 調(diào)用 getVideoBase64 并將第一步得到的url轉(zhuǎn)給 getVideoBase64 即可得到視頻第一幀圖片, getVideoBase64 返回的片為 base64

    2023年04月09日
    瀏覽(21)
  • canvas截取多個視頻的第一幀,第n秒畫面

    canvas截取多個視頻的第一幀,第n秒畫面

    業(yè)務(wù)涉及視頻預(yù)覽,不點(diǎn)擊視頻則不播放而是先展示視頻的畫面給到用戶 “因為本人特別喜歡梅艷芳,所以也留存了很多她的視頻,這里就以她的視頻做測試了” 截取多個視頻的第一幀,使用:Promise+loadeddata事件+canvas Promise來幫助我們順序地拿到多個視頻的第一幀畫面 loa

    2023年04月08日
    瀏覽(19)
  • vue2實現(xiàn)截取視頻第一幀圖像作為開始封面

    要在Vue中實現(xiàn)截取視頻的第一幀作為封面,你可以使用HTML5的元素和Canvas API來實現(xiàn)。loadeddata事件監(jiān)聽必須在視頻加載完成后執(zhí)行,然后通過Canvas的drawImage方法將視頻幀繪制到Canvas上,并使用toDataURL方法將Canvas內(nèi)容轉(zhuǎn)換為Base64編碼的圖像數(shù)據(jù)URL 在你的Vue組件中,使用元素來加

    2024年02月12日
    瀏覽(24)
  • opencv視頻截取每一幀并保存為圖片python代碼CV2實現(xiàn)練習(xí)

    當(dāng)涉及到視頻處理時,Python中的OpenCV庫提供了強(qiáng)大的功能,可以方便地從視頻中截取每一幀并將其保存為圖片。這是一個很有趣的練習(xí),可以讓你更深入地了解圖像處理和多媒體操作。 使用OpenCV庫,你可以輕松地讀取視頻文件,并在循環(huán)中逐幀讀取視頻的每一幀。隨后,你可

    2024年02月12日
    瀏覽(31)
  • 已實現(xiàn):JS如何根據(jù)視頻的http(s)地址,來截取幀圖片,并實現(xiàn)大圖壓縮的功能

    已實現(xiàn):JS如何根據(jù)視頻的http(s)地址,來截取幀圖片,并實現(xiàn)大圖壓縮的功能

    現(xiàn)在,我們已經(jīng)有了視頻的http地址,我們怎么截取幀圖片呢?我以Vue為基礎(chǔ)架構(gòu),來寫寫代碼。 1、先寫布局,先得有video,然后得有canvas 界面上很簡單,就一個視頻容器,一個畫布canvas還不讓它顯示,還有一個就是截取幀圖片了。 接下來是js關(guān)鍵方法部分: 以上的代碼就是

    2024年01月17日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包