上传视频,取第一帧,缩略图demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | <!DOCTYPE html> <html lang= "en" > <head> <meta charset= "UTF-8" > <meta name= "viewport" content= "width=device-width, initial-scale=1.0" > <title>Document</title> <style> #img-content { display: flex; padding:10px; border:5px solid red; } img { width:100px; height:100px; margin-right:20px; } </style> </head> <body> <input type= "file" /> <div id= "img-content" ></div> <script> const inp = document.querySelector( 'input[type=file]' ) inp.onchange = function (e) { const file = e.target.files[0] console.log(file) const content = document.getElementById( 'img-content' ) for ( let i=0;i<10;i++){ captureFrame(file,i).then(({url})=>{ console.log(url) const img = document.createElement( 'img' ) img.src = url content.appendChild(img) }) } } function captureFrame(file,time=0) { return new Promise((resolve) => { const video = document.createElement( 'video' ) video.currentTime = time video.muted = true video.autoplay = true video.src = URL.createObjectURL(file) video.oncanplay = function () { const canvas = document.createElement( 'canvas' ) canvas.width = video.videoWidth canvas.height = video.videoHeight const ctx = canvas.getContext( '2d' ) ctx.drawImage(video,0,0,canvas.width,canvas.height) // document.body.appendChild(canvas) canvas.toBlob((blob)=>{ const url = URL.createObjectURL(blob) console.log(url) resolve({url,blob}) }) } }) } </script> </body> </html> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异