1.准备
import {onMounted,ref} from 'vue'
import GIF from '@/js/gif'
const videoDom = ref(null)
const imgDom = ref(null)
const canvas = ref(null)
let startGif
let stopGif
2.onMounted
canvas.value.width = 400
canvas.value.height = 400
const gif = new GIF({
workers: 20,
quality: 1,
width : canvas.value.width,
height : canvas.value.height,
workerScript : './js/gif.worker.js '
});
3.渲染方法
let timer
const context = canvas.value.getContext('2d')
const renderOnImg = () => {
const img = document.createElement('img')
context.clearRect(0,0,canvas.value.width,canvas.value.width)
context.drawImage(videoDom.value,0,0,canvas.value.width,canvas.value.height)
img.src = canvas.value.toDataURL('image/png')
img.onload = () => {
gif.addFrame(img,{
delay: 100,
copy : false
})
}
}
4.定义开始与结束的方法
startGif = () => {
context.clearRect(0,0,canvas.value.width,canvas.value.width)
videoDom.value.play()
timer = setInterval(renderOnImg,100)
}
stopGif = () => {
gif.on('finished',blob => {
imgDom.value.src = URL.createObjectURL(blob)
console.log(URL.createObjectURL(blob))
imgDom.value.setAttribute('download', 'my.gif')
})
gif.render()
clearInterval(timer)
}