vue-pure-admin/static/js/index-DX2BGjOp.js

2 lines
6.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var I=Object.defineProperty;var V=(c,t,s)=>t in c?I(c,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):c[t]=s;var a=(c,t,s)=>V(c,typeof t!="symbol"?t+"":t,s);import{e as b}from"./mitt-E5P-NQ8u.js";import{d as F,a as g,a2 as L,m as P,y as U,b as _,e as M,w as r,g as d,z as S,f as u,i as A,h as f,A as B,j as i,_ as z}from"./index-DI6gHrBb.js";class H{constructor(t){a(this,"canvas");a(this,"ctx");a(this,"images");a(this,"container");a(this,"positionX");a(this,"isDragging");a(this,"startX");a(this,"handleClick",t=>{this.drawTick(t)});a(this,"handleMouseDown",t=>{this.startDrag(t.clientX)});a(this,"handleMouseMove",t=>{this.drag(t.clientX)});a(this,"handleMouseUp",()=>{this.endDrag()});a(this,"handleTouchStart",t=>{t.touches.length===1&&(t.preventDefault(),this.startDrag(t.touches[0].clientX))});a(this,"handleTouchMove",t=>{t.touches.length===1&&(t.preventDefault(),this.drag(t.touches[0].clientX))});a(this,"handleTouchEnd",()=>{this.endDrag()});this.canvas=document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),this.images=[],this.positionX=0,this.isDragging=!1,this.startX=0,this.container=document.getElementById(t),this.container&&(this.container.appendChild(this.canvas),this.canvas.width=this.container.clientWidth,this.canvas.height=this.container.clientHeight)}addImage(t,s,n,o,v){const p=new Image;p.src=t,this.images.push({img:p,x:s,y:n,width:o,height:v}),this.render()}render(){this.clearRect(),this.images.forEach(t=>{const s=t.x+this.positionX;this.ctx.drawImage(t.img,s,t.y,t.width,t.height)})}clearImages(){this.images=[]}clearRect(){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)}drawTick(t){this.render();const s=Math.ceil((Math.abs(this.positionX)+t.offsetX)/this.images[0].width)-1,n=t.offsetX,o=t.offsetY;this.ctx.strokeStyle="red",this.ctx.lineWidth=4,this.ctx.lineCap="round",this.ctx.beginPath(),this.ctx.moveTo(n-10,o),this.ctx.lineTo(n,o+10),this.ctx.lineTo(n+15,o-10),this.ctx.stroke(),b.emit("imageInfo",this.images[s])}addListener(){this.canvas&&(this.canvas.addEventListener("click",this.handleClick),this.canvas.addEventListener("mousedown",this.handleMouseDown),this.canvas.addEventListener("mousemove",this.handleMouseMove),this.canvas.addEventListener("mouseup",this.handleMouseUp),this.canvas.addEventListener("touchstart",this.handleTouchStart),this.canvas.addEventListener("touchmove",this.handleTouchMove),this.canvas.addEventListener("touchend",this.handleTouchEnd))}startDrag(t){this.canvas.style.cursor="grabbing",this.canvas.style.userSelect="none",this.startX=t,this.isDragging=!0}drag(t){if(!this.isDragging)return;const s=t-this.startX,n=this.images.length*this.images[0].width-this.container.clientWidth;this.positionX=Math.max(Math.min(this.positionX+s,0),-n),this.startX=t,this.render()}endDrag(){this.canvas.style.cursor="grab",this.canvas.style.userSelect="auto",this.isDragging=!1}}const W={VITE_PUBLIC_PATH:"/vue-pure-admin/"},j={class:"card-header"},N={class:"font-medium"},R={class:"flex flex-wrap"},G={id:"canvas-container","element-loading-text":"温馨提示:可左右拖拽图片并单击选取所需的帧图片",class:"w-full h-[200px] overflow-hidden mt-6"},m=200,Y=F({name:"VideoFrame",__name:"index",setup(c){const t=g(""),s=g(),n=g(),o=g(!1),{loadScript:v}=L(),{VITE_PUBLIC_PATH:p}=W,x=l=>`${p}wasm/${l}`,k=x("index.js"),T=x("capture.worker.js"),X=x("capture.worker.wasm");v({src:k}).then(l=>{l[0].message==="加载成功"&&(n.value=cheetahCapture.initCapture({workerPath:T,wasmPath:X}))}),P(()=>{s.value=new H("canvas-container"),b.on("imageInfo",l=>t.value=l.img.src)});function y(l){return t.value="",o.value=!0,s.value.clearImages(),n.value.then(e=>{e.capture({file:l,info:16,onChange:(h,{url:w})=>{s.value.addImage(w,m*h.url.length,0,m,m)},onSuccess:()=>{s.value.addListener(),s.value.drawTick({offsetX:m/2,offsetY:m/2}),o.value=!1},onError:()=>{o.value=!1}})}),!1}return U(()=>{b.off("imageInfo")}),(l,e)=>{const h=f("el-link"),w=f("el-upload"),E=f("el-image"),C=f("el-card"),D=B("loading");return M(),_(C,{shadow:"never"},{header:r(()=>[d("div",j,[d("span",N,[d("p",null,[e[1]||(e[1]=i(" 基于自定义编译 ")),u(h,{href:"https://github.com/FFmpeg/FFmpeg",target:"_blank",style:{margin:"0 4px 5px","font-size":"16px"}},{default:r(()=>e[0]||(e[0]=[i(" FFmpeg ")])),_:1}),e[2]||(e[2]=i(" 的截帧工具支持MP4、MOV、AVI、WebM、MKV等主流格式支持 H.264AVC、H.265HEVC、MPEG-2、MPEG-4、VP8、VP9、WMV3编码格式 "))]),e[11]||(e[11]=i(" 当然还可以支持更多视频格式只要FFmpeg支持的按理都能支持您也可参考 ")),u(h,{href:"https://github.com/wanwu/cheetah-capture",target:"_blank",style:{margin:"0 4px 5px","font-size":"16px"}},{default:r(()=>e[3]||(e[3]=[i(" cheetah-capture ")])),_:1}),e[12]||(e[12]=i(" 和 ")),u(h,{href:"https://github.com/jordiwang/web-capture",target:"_blank",style:{margin:"0 4px 5px","font-size":"16px"}},{default:r(()=>e[4]||(e[4]=[i(" web-capture ")])),_:1}),e[13]||(e[13]=i(" 修改并编译wasm等文件强烈推荐在Ubuntu系统进行编译 ")),d("p",null,[e[6]||(e[6]=i(" mac系统推荐安装 ")),u(h,{href:"https://github.com/utmapp/UTM",target:"_blank",style:{margin:"0 4px 5px","font-size":"16px"}},{default:r(()=>e[5]||(e[5]=[i(" UTM ")])),_:1}),e[7]||(e[7]=i(" 虚拟机windows系统推荐安装VMware虚拟机 "))]),d("p",null,[e[9]||(e[9]=i(" 当然这只是一个视频帧截取工具,如果您想要更多操作可以研究下 ")),u(h,{href:"https://ffmpegwasm.netlify.app/",target:"_blank",style:{margin:"0 4px 5px","font-size":"16px"}},{default:r(()=>e[8]||(e[8]=[i(" ffmpeg.wasm ")])),_:1}),e[10]||(e[10]=i(" ,它是基于 FFmpeg 的纯 WebAssembly / JavaScript 工具,可以在浏览器内进行视频和音频录制、转换和流式传输等,不过通过一些实践,对于时长较长的视频性能还是不太行,不过用于时长较短的短视频还是可以上生产的 "))])]),u(h,{class:"mt-2",href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/able/video-frame",target:"_blank"},{default:r(()=>e[14]||(e[14]=[i(" 代码位置 src/views/able/video-frame ")])),_:1})])]),default:r(()=>[d("div",R,[u(w,{drag:"","show-file-list":!1,accept:".mp4,.mov,.avi,.webm,.mkv","before-upload":y},{default:r(()=>e[15]||(e[15]=[d("div",{class:"el-upload__text"}," 可拖拽上传视频默认截取16张帧图片可在代码中自行修改 ",-1)])),_:1}),t.value?(M(),_(E,{key:0,src:t.value,"preview-src-list":Array.of(t.value),class:"w-[180px] h-[180px] ml-2 rounded-[6px]"},null,8,["src","preview-src-list"])):A("",!0)]),S(d("div",G,null,512),[[D,o.value]])]),_:1})}}}),O=z(Y,[["__scopeId","data-v-427ed29b"]]);export{O as default};