| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import {ref} from 'vue'
- function getFileFromBase64(base64URL, filename) {
- var arr = base64URL.split(","),
- bstr = atob(arr[1]),
- n = bstr.length,
- u8arr = new Uint8Array(n);
- while (n--) {
- u8arr[n] = bstr.charCodeAt(n);
- }
- return new File([u8arr], filename.split(".")[0]+".png", { type: "image/png" });
- }
- /**
- * 获取视频的第一帧图片
- */
- export function useVideoThumbnail(){
- console.log('执行到了')
- const screenshot = ref()
- const videoDom = document.createElement('video')
- videoDom.setAttribute('crossOrigin', 'anonymous') //处理跨域 必须添加 否则 toDataURL toBlob 不生效
- videoDom.setAttribute('src', 'https://jtzx001.oss-accelerate.aliyuncs.com/huijiaoyan_test/20260114_50007/14091714_b39124aa-2380-4547-af97-06159fcf6e40.mp4')
- videoDom.currentTime = 1
- // document.body.appendChild(videoDom)
- console.log('视频元素',videoDom)
- videoDom.addEventListener('loadeddata',function(){
- console.log('加载了')
- let canvas = document.createElement('canvas')
- //使用视频的宽高作为canvas、预览图的宽高
- let width = videoDom.videoWidth
- let height = videoDom.videoHeight
- canvas.width = width
- canvas.height = height
- console.log('画布宽度',width)
- console.log('画布高度',height)
-
- canvas?.getContext('2d')?.drawImage(videoDom, 0, 0, width, height) //绘制canvas
-
- let base64URL = canvas.toDataURL('image/jpeg') //转换为base64,图片格式默认为png,这里修改为jpeg
-
- // blob链接
- canvas.toBlob((blob)=>{
- let url = URL.createObjectURL(blob)
- screenshot.value = url
- })
- // base64链接
- // screenshot.value = base64URL
- // const imgfile = getFileFromBase64(base64URL,'截图.jpg')
- // console.log('获取到的文件----',imgfile)
- })
- return screenshot
- }
|