美文网首页
js 获取gif第一帧

js 获取gif第一帧

作者: Nolenj | 来源:发表于2020-05-28 10:25 被阅读0次

效果:gif一开始是静态的,点击后才播放
参考效果:微博 贴吧 ……

demo基于vue框架,功能实现主要用原生js

<template>
    <img :src="imgblob||(src+'?time=' + new Date().valueOf())" alt="" @load="read($event)" ref="img" crossorigin="anonymous">
</template>

<script>
  export default {
    props: {
      src: {
        type: String,
        default: ''
      }
    },
    data(){
      return{
        imgblob:null
      }
    },
    methods: {
      read(e) {
        let image = e.path[0];//获取img节点,建议用ref方式
        let canvas = document.createElement("canvas"); //创建画布        
        canvas.width = image.width;
        canvas.height = image.height; //设定宽高比
        canvas.getContext('2d').drawImage(image, 0, 0, canvas.width, canvas.height); //将gif此刻帧数画入画布
        this.imgblob =  canvas.toDataURL("image/png");//将canvas转成资源url
      }
    }
  }
</script>

<style>
</style>

注意:

crossorigin="anonymous"这个属性有什么用

使用跨域资源,canvas转成资源url时会报安全错误

image.png
此时<img/>要添加crossorigin="anonymous"属性声明这是跨域请求资源
详细:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/img#attr-crossorigin

为什么要在资源后面加个时间戳 '?time=' + new Date().valueOf()

上面的安全错误解决了,但是服务端并没有无条件允许全部请求,资源请求失败
解决方法也很简单,补个条件('?time=' + new Date().valueOf())就是了,服务器怎么处理是它的事。
解决方案参考:https://segmentfault.com/q/1010000008648867

相关文章

网友评论

      本文标题:js 获取gif第一帧

      本文链接:https://www.haomeiwen.com/subject/nfroahtx.html