uniapp h5上传视频之后获取第x帧图片作为封面,app还没测试
// 上传视频
chooseVideo() {
let that = this;
uni.chooseVideo({
count: 1,
sourceType: ["album", "camera"],
success: async (res) => {
console.log(res,'视频封面')
const tempFilePath = res.tempFilePath;
// 选取视频的第x帧图片作为封面 start
let videoss = document.createElement('video');
var canvas = document.createElement('canvas');
videoss.setAttribute('width', res.width);
videoss.setAttribute('height', res.height);
videoss.setAttribute('crossOrigin', 'anonymous'); //处理跨域
videoss.setAttribute('src', res.tempFilePath);
videoss.currentTime = 5;// 第x帧
videoss.onloadeddata = function(v) {
var ctx = canvas.getContext('2d');
let width = videoss.width //canvas的尺寸和图片一样
let height = videoss.height
canvas.width = width;
canvas.height = height;
canvas.getContext("2d").drawImage(videoss, 0, 0, width, height); //绘制canvas
//转为base64
var dataURL = canvas.toDataURL('image/jpeg'); //base64 格式
console.log(dataURL,"-----")
//上传base64
that.$api.sendRequest({
url: '/api/upload/Base64',
data:{
images: dataURL
},
success: res => {
if (res.code >= 0) {
console.log(res,'封面')
that.fromdata.images = res.data.pic_path
} else {
that.$util.showToast({
title: res.message
});
}
},
fail: res => {
that.$util.showToast({
title: res.message
});
}
})
}
// 选取视频的第x帧图片作为封面 end
},
});
},
注:我这里用的本地路径转base64图片,如果用网络路径会出现跨域的情况。
我百度这个也可以获取封面,不过只支持小程序。