河南省建设工程招投标协会网站,石家庄市建设厅官网,网站建设思路及设计方案,怎样创建网站桌面快捷方式视频截图效果预览 利用Canvas进行截图
要用原生js实现视频截图#xff0c;可以利用canvas的绘图功能 ctx.drawImage#xff0c;只需要获取到视频标签#xff0c;就可以通过drawImage把视频当前帧图像绘制在canvas画布上。
const video document.querySelector(video)
con…视频截图效果预览 利用Canvas进行截图
要用原生js实现视频截图可以利用canvas的绘图功能 ctx.drawImage只需要获取到视频标签就可以通过drawImage把视频当前帧图像绘制在canvas画布上。
const video document.querySelector(video)
const canvas document.createElement(canvas)
const w video.videoWidth
const h video.videoHeight
canvas.width w
canvas.height h
const ctx canvas.getContext(2d)
ctx.drawImage(video, 0, 0, w, h)接下来需要把画布转化为图片canvas提供了两个2D转换为图片的方法canvas.toDataURL()和canvas.toBlob()
canvas.toDataURL(mimeType, qualityArgument)方法
toDataURL可以把图片转换成base64格式的图片是一个同步方法使用很简单在上面已经绘制好画布的基础上只需要下面一行代码就可以获取到当前视频帧的截图了
const imageUrl canvas.toDataURL(image/png)
console.log(imageUrl)可以看到它最终生成了一个很长字符串的base64图片地址。
canvas.toBlob(callback, mimeType, qualityArgument)方法
这个方法相比上一个方法的优点是它是异步的所以有一个callback回调这个callback回调方法默认的第一个参数就是转换好的blob文件信息本文也想重点介绍这种方法的使用。
先说明一下这个方法的三个参数
参数类型是否必传说明callbackFunction是toBlob()方法执行成功后的回调方法支持一个参数表示当前转换的Blob对象mimeTypeString否表示需要转换的图像的mimeType类型。默认值是image/png还可以是image/jpeg甚至image/webp前提浏览器支持等qualityArgumentNumber否表示转换的图片质量。范围是0到1。由于Canvas的toBlob()方法转PNG是无损的因此此参数默认是没有效的除非指定图片mimeType是image/jpeg或者image/webp此时默认压缩值是0.92
使用写法如下
canvas.toBlob((blob) {console.log(blob)
}, image/png, 0.92)可以看到方法执行得到的是当前转换的Blob对象 那么剩下的就是要将此Blob对象进一步转化为可供img显示的图片地址。
将Blob对象转化为图片地址
下面介绍三种方法进行转化
方式一 通过URL.createObjectURL()方法将Blob转化为URL
canvas.toBlob((blob) {const imageUrl URL.createObjectURL(blob)console.log(1, imageUrl)
}, image/jpeg, 1)如下图所示转化得到的是一个bold流的图片地址。 方式二 通过FileReader将Blob转化为DataURL
canvas.toBlob((blob) {const reader new FileReader()reader.readAsDataURL(blob)reader.onload () {const imageUrl reader.resultconsole.log(2, imageUrl)}
}, image/webp, 1)
如下图所示转化得到的是一个base64的图片地址。 方式三 通过ajax将Blob上传到服务器
canvas.toBlob((blob) {const formData new FormData()formData.append(file, blob) // 这里的file是接口接收参数的字段名需要根据实际情况改变const xhr new XMLHttpRequest()xhr.onload () {const imageUrl JSON.parse(xhr.responseText).data // 接口回调参数需要根据实际情况处理console.log(3, imageUrl)}xhr.open(POST, /api/upload, true) // /api/upload是上传接口需要根据实际情况改变xhr.send(formData)
}, image/webp, 1)由此就会将图片上传到你的文件服务器里最终可以得到一个你自己文件服务器下对应的图片地址。
toBlob()方法的兼容
首先toBlob()方法IE9浏览器不支持因为Blob数据格式IE10才支持。
然后对于IE浏览器toBlob()的兼容性有些奇怪IE10浏览器支持ms私有前缀的toBlob()方法完整方法名称是msToBlob()。而IE11toBlob()方法却不支持。
但是我们可以基于toDataURL()方法进行polyfill性能相对会差一些JavaScript代码如下
if (!HTMLCanvasElement.prototype.toBlob) {Object.defineProperty(HTMLCanvasElement.prototype, toBlob, {value: function (callback, type, quality) {var canvas thissetTimeout(function() {var binStr atob( canvas.toDataURL(type, quality).split(,)[1] )var len binStr.lengthvar arr new Uint8Array(len)for (var i 0; i len; i) {arr[i] binStr.charCodeAt(i)}callback(new Blob([arr], { type: type || image/png }))})}})
}注意事项
使用外部链接播放视频的话需要在视频标签上设置允许跨域的处理添加属性crossOriginanonymous即可
video classNamevideoTag crossOriginanonymous controlssource srchttps://www.w3school.com.cn/example/html5/mov_bbb.mp4 typevideo/mp4 /
/video或者在js里处理
const video document.querySelector(.videoTag)
video.setAttribute(crossOrigin, anonymous)
video.load()否则会报以下错误
完整封装示例
最后给出一个利用toBlob进行视频截图最终获取base64图片地址的封装方法代码示例如下
function getBase64ByVideo(video) {const canvas document.createElement(canvas)const w video.videoWidthconst h video.videoHeightcanvas.width wcanvas.height hreturn new Promise((resolve, reject) { // 由于toBlob方法是异步的所以这里用Promiseconst ctx canvas.getContext(2d)ctx.drawImage(video, 0, 0, w, h)canvas.toBlob((blob) {// 通过FileReader将Blob转化为DataURLconst reader new FileReader()reader.readAsDataURL(blob)reader.onload () {const imageUrl reader.resultresolve(imageUrl)}}, image/webp, 1) // 根据需要可以自行配置这里的两个参数})
}调用方法
const videoTag document.querySelector(.videoTag)
const dataUrl await getBase64ByVideo(videoTag)
文章转载自: http://www.morning.xqltq.cn.gov.cn.xqltq.cn http://www.morning.jydky.cn.gov.cn.jydky.cn http://www.morning.tdgwg.cn.gov.cn.tdgwg.cn http://www.morning.beijingzy.com.cn.gov.cn.beijingzy.com.cn http://www.morning.zdhxm.com.gov.cn.zdhxm.com http://www.morning.jxzfg.cn.gov.cn.jxzfg.cn http://www.morning.rszyf.cn.gov.cn.rszyf.cn http://www.morning.gswfs.cn.gov.cn.gswfs.cn http://www.morning.bpmdx.cn.gov.cn.bpmdx.cn http://www.morning.qxbsq.cn.gov.cn.qxbsq.cn http://www.morning.pwdmz.cn.gov.cn.pwdmz.cn http://www.morning.yzygj.cn.gov.cn.yzygj.cn http://www.morning.mwmtk.cn.gov.cn.mwmtk.cn http://www.morning.zpqk.cn.gov.cn.zpqk.cn http://www.morning.pdbgm.cn.gov.cn.pdbgm.cn http://www.morning.xkmrr.cn.gov.cn.xkmrr.cn http://www.morning.sqfrg.cn.gov.cn.sqfrg.cn http://www.morning.drbd.cn.gov.cn.drbd.cn http://www.morning.wbqk.cn.gov.cn.wbqk.cn http://www.morning.lnbcg.cn.gov.cn.lnbcg.cn http://www.morning.pynzj.cn.gov.cn.pynzj.cn http://www.morning.jxfsm.cn.gov.cn.jxfsm.cn http://www.morning.dsncg.cn.gov.cn.dsncg.cn http://www.morning.sryhp.cn.gov.cn.sryhp.cn http://www.morning.yysqz.cn.gov.cn.yysqz.cn http://www.morning.zsyqg.cn.gov.cn.zsyqg.cn http://www.morning.pqfbk.cn.gov.cn.pqfbk.cn http://www.morning.qwyms.cn.gov.cn.qwyms.cn http://www.morning.sqqds.cn.gov.cn.sqqds.cn http://www.morning.cnfjs.cn.gov.cn.cnfjs.cn http://www.morning.rttkl.cn.gov.cn.rttkl.cn http://www.morning.wzjhl.cn.gov.cn.wzjhl.cn http://www.morning.kgxrq.cn.gov.cn.kgxrq.cn http://www.morning.kqnwy.cn.gov.cn.kqnwy.cn http://www.morning.qxlgt.cn.gov.cn.qxlgt.cn http://www.morning.eshixi.com.gov.cn.eshixi.com http://www.morning.xkjrs.cn.gov.cn.xkjrs.cn http://www.morning.rkbly.cn.gov.cn.rkbly.cn http://www.morning.rkqzx.cn.gov.cn.rkqzx.cn http://www.morning.dxsyp.cn.gov.cn.dxsyp.cn http://www.morning.ybnps.cn.gov.cn.ybnps.cn http://www.morning.tyrlk.cn.gov.cn.tyrlk.cn http://www.morning.prgrh.cn.gov.cn.prgrh.cn http://www.morning.dfdhx.cn.gov.cn.dfdhx.cn http://www.morning.trrhj.cn.gov.cn.trrhj.cn http://www.morning.fgkrh.cn.gov.cn.fgkrh.cn http://www.morning.nlkjq.cn.gov.cn.nlkjq.cn http://www.morning.mlycx.cn.gov.cn.mlycx.cn http://www.morning.bktly.cn.gov.cn.bktly.cn http://www.morning.dpmkn.cn.gov.cn.dpmkn.cn http://www.morning.mzhhr.cn.gov.cn.mzhhr.cn http://www.morning.sdecsd.cn.gov.cn.sdecsd.cn http://www.morning.xdmsq.cn.gov.cn.xdmsq.cn http://www.morning.kndt.cn.gov.cn.kndt.cn http://www.morning.wcft.cn.gov.cn.wcft.cn http://www.morning.mtmph.cn.gov.cn.mtmph.cn http://www.morning.nhgkm.cn.gov.cn.nhgkm.cn http://www.morning.nkqxb.cn.gov.cn.nkqxb.cn http://www.morning.rdxnt.cn.gov.cn.rdxnt.cn http://www.morning.ghyfm.cn.gov.cn.ghyfm.cn http://www.morning.nnrqg.cn.gov.cn.nnrqg.cn http://www.morning.rfxyk.cn.gov.cn.rfxyk.cn http://www.morning.mingjiangds.com.gov.cn.mingjiangds.com http://www.morning.xbckm.cn.gov.cn.xbckm.cn http://www.morning.mlyq.cn.gov.cn.mlyq.cn http://www.morning.thwhn.cn.gov.cn.thwhn.cn http://www.morning.kszkm.cn.gov.cn.kszkm.cn http://www.morning.mhrzd.cn.gov.cn.mhrzd.cn http://www.morning.qdlr.cn.gov.cn.qdlr.cn http://www.morning.ggqcg.cn.gov.cn.ggqcg.cn http://www.morning.tntbs.cn.gov.cn.tntbs.cn http://www.morning.jpkhn.cn.gov.cn.jpkhn.cn http://www.morning.lhptg.cn.gov.cn.lhptg.cn http://www.morning.gbfuy28.cn.gov.cn.gbfuy28.cn http://www.morning.tmsxn.cn.gov.cn.tmsxn.cn http://www.morning.qgghj.cn.gov.cn.qgghj.cn http://www.morning.bflws.cn.gov.cn.bflws.cn http://www.morning.krdb.cn.gov.cn.krdb.cn http://www.morning.zlff.cn.gov.cn.zlff.cn http://www.morning.fxpyt.cn.gov.cn.fxpyt.cn