Live2D 看板娘 / Demo

Js 根据视频链接取该视频第一帧的图片,并返回Base64

<!DOCTYPE html>
<html>

<head>
    <title>Get Video Frame Example</title>
</head>

<body>
    <div id="result"></div>
    <script>
        // 获取视频第一帧的函数
        function getVideoFirstFrame(videoUrl) {
            // 创建video元素
            const video = document.createElement('video');
            video.src = videoUrl;
            video.setAttribute('crossOrigin', 'Anonymous'); // 处理跨域
            video.setAttribute('preload', 'auto'); // auto|metadata|none
            // 等待视频加载完成
            return new Promise((resolve, reject) => {
                video.addEventListener('loadedmetadata', () => {
                    debugger;
                    // 创建canvas元素
                    const canvas = document.createElement('canvas');
                    canvas.width = video.videoWidth;
                    canvas.height = video.videoHeight;

                    // 将视频第一帧绘制到canvas上
                    const ctx = canvas.getContext('2d');

                    ctx.drawImage(video, 0, 0, canvas.width, canvas.height);

                    debugger;
                    // 将canvas图像转换为base64格式的数据URI
                    const dataUrl = canvas.toDataURL();

                    // 返回base64格式的数据URI
                    resolve(dataUrl);
                });

                // 如果视频加载出错,则返回错误信息
                video.addEventListener('error', () => {
                    reject(`Failed to load video: ${videoUrl}`);
                });
            });
        }

        // 使用示例
        getVideoFirstFrame("https://xxx.com//medias/b20a7c4b68475153194a00f54ed3dbba5.mp4")
            .then((dataUrl) => {
                console.log(dataUrl); // 打印获取到的base64格式的数据URI
                const resultDiv = document.getElementById('result');
                resultDiv.innerHTML = `<img src="${dataUrl}" />`;
            })
            .catch((error) => {
                console.error(error); // 打印错误信息
            });
    </script>
</body>

</html>

 

posted @ 2023-03-02 11:33  KysonDu  阅读(910)  评论(0编辑  收藏  举报