当前位置: 首页 > news >正文

建设银行广州支行网站网站开发相关书籍

建设银行广州支行网站,网站开发相关书籍,莱芜网逃人员,网站建设包括使用input上传视频&#xff0c;获得视频的第一帧 参考&#xff1a;JavaScript获取视频的尺寸信息和第一帧图片 - 掘金 (juejin.cn) html&#xff1a; <inputbind:this{uploadRef}on:change{handleUpload}accept"video/*"type"file"/>视频类型校验&a…

使用input上传视频,获得视频的第一帧
参考:JavaScript获取视频的尺寸信息和第一帧图片 - 掘金 (juejin.cn)

html:

<inputbind:this={uploadRef}on:change={handleUpload}accept="video/*"type="file"/>

视频类型校验:

const VIDEO_REG =/^(?:video\/avi|video\/mpeg|video\/mp4|video\/ogg|video\/webm|video\/x-ms-wmv|video\/x-msvideo)$/i;

handleUpload

  • 校验类型
  • 获得视频第一帧图片:调用getVideoImg方法
const handleUpload=(e)=>{const files = e.target.files[0];if(VIDEO_REG.test(files.type)){const videoImg = await getVideoImg(files);}
}

相关方法:getVideoImg

使用canvas实现:从一个视频文件中提取一帧图像,并将这个图像转换为一个可以在浏览器中使用的URL。

const getVideoImg = async (files: File): Promise<string> => {try {// 使用loadVideo函数加载视频文件,等待加载完成const video: HTMLVideoElement = await loadVideo(files);const canvasElem = document.createElement('canvas');// 设置canvas的宽度和高度与视频的宽度和高度相同canvasElem.width = video.videoWidth;canvasElem.height = video.videoHeight;// 获取canvas的2d渲染上下文,并在canvas上绘制视频的当前帧canvasElem.getContext('2d')?.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);const pngFile = await new Promise<string>((resolve, reject) => {// 将canvas的内容导出成一个blob文件canvasElem.toBlob((blob) => {if (blob) {// 成功创建了blob文件,将其转换为File对象,然后创建一个指向这个File对象的URLresolve(URL.createObjectURL(toThumbFile(blob)));} else {// 创建blob文件失败,拒绝Promisereject('');}}, 'image/png');});// 返回Promise的结果,即指向File对象的URLreturn pngFile;} catch (error) {// 如果在上述过程中发生错误,打印错误信息console.error(error);}
};

其中调用了loadVideo

const loadVideo = (file: File): Promise<HTMLVideoElement> => {return new Promise(function (resolve, reject) {const videoElem = document.createElement('video');const dataUrl = URL.createObjectURL(file);videoElem.onloadeddata = function () {// 当video元素的当前帧的数据可用时,将video元素作为Promise的结果resolve(videoElem);};// 当video元素发生错误时的处理函数videoElem.onerror = function () {reject('video error');};// 设置video元素的preload属性为'auto',这样video元素会预加载数据// 如果不设置这个属性,可能会导致截图为黑色图片的情况videoElem.setAttribute('preload', 'auto');// 设置video元素的src属性为指向File对象的URLvideoElem.src = dataUrl;});
};// 输入的Blob对象,文件名是'video_img.png'
const toThumbFile = (blob) => new File([blob], 'video_img.png');

调用:

videoImg = await getVideoImg(files);

得到的videoImg 可以在<img src={videoImg }/> 中显示。

不用videoImg 后,要使用URL.revokeObjectURL释放:URL.createObjectURL生成的链接以blob:开头。一般来说在 销毁 的生命周期调用。

if (/^blob:/.test(videoImg)) {URL.revokeObjectURL(videoImg);}
http://www.yayakq.cn/news/200702/

相关文章:

  • 淘宝网站开发类目没法上架商品flask做视频网站
  • 湖北餐饮网站建设长沙app开发制作公司
  • 学校网站群建设 ppt山西网站建设方案
  • 深圳网站建设流程wordpress 常见问题
  • asp net做购物网站微信商城是正规的吗
  • 淮海中路街道网站建设进入公众号闪退怎么回事
  • 教育网站建站需求定制型网站建设服务器
  • 免费的黄冈网站有哪些平台游戏软件wordpress 提供了 支持
  • 做网站游戏推广赚钱吗个人怎么做一个网站
  • 全国十大婚恋网站排名wordpress grace6
  • 网络服务采购seo推广优化收费
  • 虹口免费网站制作网站推广常用方法有哪些
  • 贸易公司做网站有优势吗软件开发工具的选择与评价
  • php做网站搜索框定制网站开发多少钱
  • 广州公司摇号申请网站wordpress搜索开发
  • 做影视网站 片源从哪里来网站优化需要什么
  • 门户网站建设与管理办法如何建设一个视频网站
  • 国外网站专题红黄wordpress如何播放百度云视频
  • 梧州外贸网站推广设计国外素材设计欣赏网站
  • 外贸展示型网站建设公司美橙网站建设教程
  • 该网站无备案个人品牌建设
  • 移动端 pc网站开发昆明做网站的公司
  • 湖北建设厅举报网站用ps做美食网站
  • 做哪些网站比较好的自己做网站运营
  • 福建泉州做网站公司赣州南康网站建设
  • 网站网页制作图片素材企业网站seo从哪开始
  • 六安市网站建设wordpress 卢晓松
  • 跑腿个人网站怎么做深圳百度seo关键词排名
  • 国外网站建设什么价格低失信人信息查询
  • 分类信息系统网站模板纯静态企业网站模板免费下载