html2canvas   截屏的插件

http://jnordberg.github.io/gif.js/  GIF.js官网

<script src='https://imgss.github.io/demo/gif/gif.js'></script>
<script>
  var gif = new GIF({
  workers: 2,
  quality: 10,
  background: '#ffffff',//原透明色替换为白色
  transparent: 0xffffff//把图片中的白色替换为gif的透明色
  });
  // add a image element
  gif.addFrame(document.getElementById('img'),{copy: true});
  // or a canvas element
  // gif.addFrame(canvasElement, {delay: 200});
  // or copy the pixels from a canvas context
  // gif.addFrame(ctx, {copy: true});
  gif.on('finished', function(blob) {
    console.log(blobToDataURL(blob));
    // window.open(URL.createObjectURL(blob));
  });
  gif.render();
  const blobToDataURL = (blob) => {
  return new Promise((resolve, reject) => {
  let reader = new FileReader();
  reader.addEventListener('load', () => {
  resolve(reader.result); // reader.result即为包含文件内容的字符串
  });
  reader.readAsDataURL(blob);
  });
  };
</script>
 
 
 
 
 
 
 
 
 

使用h5的canvas提供的接口很容易实现一些动画,如果能把这些动画实现成gif动图就更好啦,还真有大神实现啦这个功能下面说明使用方法

开源库地址

首先引入需要的js文件gif.js在页面里自己创建一个canvas并且在它上面画一些动画

js附件在后面下载

然后就是gif的使用方法啦var gif = new GIF({

workers: 2,

quality: 10

});

// 添加一个图片标签对象像素到当前帧

gif.addFrame(imageElement);

//或添加一个canvas对象的像素到当前帧

gif.addFrame(document.getElementsByTagName('canvas')[0], {

delay: 200

});

gif.addFrame(document.getElementsByTagName('canvas')[0], {

delay: 200

});

gif.addFrame(document.getElementsByTagName('canvas')[0], {

delay: 200

});

//从canvas context复制像素到当前帧

gif.addFrame(ctx, {

copy: true

});

//合成图片成功后

gif.on('finished', function(blob) {

window.open(URL.createObjectURL(blob));

});

//渲染图片

gif.render();

附录:创建GIF对象的配置参数参数默认描述repeat0重复播放 -1 = 不重复, 0 = 重复

quality10图片质量越小越质量越好

workers2number of web workers to spawn

workerScriptgif.worker.js原版请注意下路径,文章中的附件已经添加自动查找路径

background#fff当原图像为透明时进行替换的背景色

widthnull输出图片的宽

heightnull输出图片的高

transparentnull原图片中要透明的十六进制颜色, 0x00FF00 = green

ditherfalsedithering method, e.g. FloydSteinberg-serpentine

debugfalse调试为true时会打印日志到console

如果宽或者高为null的话就以添加的第一帧大小为准

要注意的一个地方使用canvas context这个添加图片数据的时候,如果是第一帧,则会因为没有初始化大小,而从context里也找不出来大小,所以会报错,正确方法是实例化GIF时传入宽高的配置,这样添加图片帧的三个方法使用才会正常

addFrame 参数参数默认描述delay500帧延时,设置为0时自动转成500

copyfalse复制像素数据

制作透明gif图片的方法var gif = new GIF({

workers: 2,

quality: 10,

background: '#ffffff',//原透明色替换为白色

transparent: 0xffffff//把图片中的白色替换为gif的透明色

});

使用addFrame添加图片数据的时候把背景设置成#ffffff白色,生成gif图片时图片中的白色就自动变成透明啦

备注:使用环境必须是在服务器环境下

图片转成gif 变成base64的更多相关文章

  1. 减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)

    在网站开发过程中,对于页面的加载效率一般都想尽办法求快.那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法.上一篇博文我们讲解了 “利用将小图标合成一张背景图来减少HTTP请求”, ...

  2. 图片转换成Base64编码集成到html文件

    首先为什么要这么做?  原因很简单这样可以减少与服务器的请求,当然对于一些浏览器并不支持,如IE8.通常用在手机版网站中,具体转化方法如下: 1.在线打开Base64的编码器将图片编码成Base64 ...

  3. 运用C语言将图片转换成16进制的字符串(base64)

    最近在写手机端的性能测试脚本的时候,发现手机在上传图片数据时,先将图片转换成一堆16进制的字符,将字符传输过去,服务器再将字符解码成图片 我们在loadrunner中测试时,就需要用C语言将图片编码. ...

  4. java 图片转换成base64字符串

    import java.io.ByteArrayOutputStream; import java.io.FileInputStream;import java.io.FileOutputStream ...

  5. JS将图片转换成Base64码

    直接上代码 html页面代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  6. js绝对地址图片转换成base64的方法

    //将图片转换成base64 function getBase64Image(url, callback){ var canvas = document.createElement('canvas') ...

  7. 利用PHP将图片转换成base64编码的实现方法

    先来说一下为什么我们要对图片base64编码 base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一.base64主要不是加密,它主要的用途是把某些二进制数转成普通字符用于网络传输. ...

  8. data:image/png;base64 上传图像将图片转换成base64格式

    大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJ ...

  9. 图片转成base64, base64转成图片

    1.我们在看代码时经常在img或css背景图片中看到: src=”data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgA ...

  10. Java对网络图片/本地图片转换成Base64编码和解码

    一.将本地图片转换成Base64编码字符串 /** * 将本地图片转换成Base64编码字符串 * * @param imgFile 图片目录路径 * @return */ public static ...

随机推荐

  1. cookie,session,token,drf-jwt

    1.cookie,session,token发展史 引入:我们都知道 http 协议本身是一种无状态的协议,一个普通的http请求简单分为三步:客户端发送请求request服务端收到请求并进行处理服务 ...

  2. SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory 解决办法

    [oracle@localhost oracle]$ ./sqlplus Error 6 initializing SQL*Plus Message file sp1<lang>.msb ...

  3. 《CSOL大灾变》开发记录——武器购买逻辑开发

    上次完成了武器购买界面设计,这次来完成武器购买逻辑与武器选择逻辑. 武器购买逻辑分为两个部分,一个部分是GUI部分的逻辑,也就是购买菜单,一个是武器游戏数据更新的逻辑,也就是实际中玩家获取武器的逻辑开 ...

  4. Linux系统Shell脚本第二章:条件测试、正整数字符串比较与if、case语句

    目录 一.条件测试 1.三种测试方法 2. 正整数值比较 3.字符串比较 4.逻辑测试 二.脚本中常用命令 1.echo命令 2.date命令 3.cal命令 4.tr命令 5.cut命令 6.sor ...

  5. django操作WEB涉及的几个命令

    1)创建项目bysms django-admin startproject bysms 2)创建应用sales (在bysms目录下执行) python manage.py startapp sale ...

  6. 在springboot使用jsp

    在springboot配置jsp环境 在pom.xml中添加配置依赖 内容如下: <dependency> <groupId>org.springframework.boot& ...

  7. 【闲话】Vscode+PlatformIO+esp-idf+esp32物联网开发小记之环境搭建

    Vscode作为一款优秀的代码编辑器,具有极为方便快捷的代码辅助与拓展功能,使用熟练后开发效率大大提高,且作为典型的IDE,不需要花费大量的时间成本即可上手,Vscode结合各种插件,可以搭建出大部分 ...

  8. 第二性 合卷本 横本.EPUB

    书本详情 第二性台版 作者: 西蒙.德.波娃(Simone de Beauvoir)出版社: 貓頭鷹原作名: Le Deuxième Sexe译者: 邱瑞鑾出版年: 2013-10页数: 1136装帧 ...

  9. Win10 U盘不自动显示

    Win+R,在窗口中输入 命令services.msc,然后点击确定按钮:这时就会打开Windows10的服务列表,在列表中找到Plug and Play服务项.双击后看一下该服务是否启动,先停止,然 ...

  10. return chain.filter(exchange); 这句啥意思

    答:继续往后执行过滤器,如果不调用这句代码,请求就不会发给控制器了,如果当前执行的过滤器后面还有过滤器,执行那个过滤器,如果没有,就执行控制器. 那我此时想一个请求取消token校验,得在这里加吗? ...