zoukankan      html  css  js  c++  java
  • 截取视频第一帧图片

    利用canvas的drawImage() API,第一个参数传video可以将视频当前帧画到画布上,(这里示例是第一帧),

    以下代码需要注意:因为跨域限制,必须放到web服务器上运行(比如localhost),如果直接是在硬盘上的文件系统打开是不行(file://...)的。

    另外,这里示例上用的是本地存了一个视频文件,实际项目时如果脚本和视频不在同一个域还是会发生跨域问题,参数另一篇帖子

     getVideoCover() 就是获取视频的函数,可以直接调用。

    <!DOCTYPE html>
    <html>
    
    <body>
        <img id="img">
        <script>
            function getVideoCover(url, width = null, height = null) {
                return new Promise((resolve, reject) => {
                    const canvas = document.createElement('canvas');
                    const video = document.createElement('video');
                    document.body.appendChild(video);
                    video.setAttribute('crossOrigin', 'anonymous');
                    canvas.width = width ? width : video.clientWidth;
                    canvas.height = height ? height : video.clientHeight;
                    video.style.height = '0';
    
                    video.onloadeddata = (() => {
                        setTimeout(() => {
                            canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
                            let b64 = canvas.toDataURL('image/png');
                            document.body.removeChild(video);
                            resolve(b64);
                        }, 100);
                    });
                    video.setAttribute('src', url);
                });
            }
            getVideoCover('./videoplayback.mp4', 200, 150).then((base64) => {
                document.getElementById('img').setAttribute('src', base64);
            });
        </script>
    </body>
    
    </html>
  • 相关阅读:
    同一账号在不同浏览器不能同时登录
    子页面像父页面传递参数--数组
    bootstaptable动态合并单元格和jxls动态合并单元格
    RedisTemplate的使用
    java项目中读取配置文件
    httpclient调用接口
    drop、truncate和delete的区别
    函数式编程
    常见配置redis.conf介绍
    mysql和redis加入到windows服务
  • 原文地址:https://www.cnblogs.com/johnjackson/p/13736217.html
Copyright © 2011-2022 走看看