js canvas实现画图、滤镜效果


Posted in Javascript onNovember 27, 2018

本文实例为大家分享了canvas实现画图、滤镜效果的具体代码,供大家参考,具体内容如下

1、用canvas来实现画图的代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <style media="screen">
  body {background:black; text-align:center}
  #v1 {background:white}
 </style>
 <script>
  window.onload=function () {
   let oV=document.getElementById('v1');
   let gd=oV.getContext('2d'); //图形上下文——绘图接口
   let oColor=document.getElementById('color1');

   let color;
   oColor.onchange=function () {
    color=this.value;
   }

   let lastX,lastY;
   oV.onmousedown=function (ev) {

    lastX=ev.offsetX;
    lastY=ev.offsetY;

    oV.onmousemove=function (ev) {
     gd.beginPath();//清除之前所有的路径
     
     gd.moveTo(lastX,lastY);
     gd.lineTo(ev.offsetX,ev.offsetY);

     lastX=ev.offsetX;
     lastY=ev.offsetY;

     gd.strokeStyle=color;//用获取到的颜色作为绘制颜色
     gd.stroke();

    }
    oV.onmouseup=function () {
     oV.onmousemove=null;
     oV.onmouseup=null;
    }
    
   }

  }


 </script>
</head>
<body>
<input type="color" id="color1" /><br/>
<!--canvas的宽和高是写在标签里的,写在style里面不起作用-->
<canvas id="v1" width="800" height="600">
</canvas>
</body>
</html>

代码的运行结果如图:

js canvas实现画图、滤镜效果

2、用canvas来实现滤镜效果,其实就是像素级操作。代码如下:代码中的1.jpg为网上找的风景图,可自行寻找。

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <style media="screen">
  body {background:black; text-align:center}
  #v1 {background:white}
 </style>
 <script>
  window.onload=function () {
   let oV=document.getElementById('v1');
   let oBtn1=document.getElementById('btn1');
   let oBtn2=document.getElementById('btn2');
   let oBtn3=document.getElementById('btn3');
   let oBtn4=document.getElementById('btn4');
   let gd=oV.getContext('2d');

   let img=new Image();
   img.src='1.jpg';
   img.onload=function () {
    gd.drawImage(img,0,0);

    oBtn1.onclick=function () {
     //获取像素区
     let imageData=gd.getImageData(0,0,oV.width,oV.height);

     //data[(r*W+c)*4]
     for(let r=0;r<oV.height;r++){
      for(let c=0;c<oV.width;c++){
       let avg=(imageData.data[(r*oV.width+c)*4]+imageData.data[(r*oV.width+c)*4+1]+imageData.data[(r*oV.width+c)*4+2])/3;

       imageData.data[(r*oV.width+c)*4]=imageData.data[(r*oV.width+c)*4+1]=imageData.data[(r*oV.width+c)*4+2]=avg;
      }
     }
     gd.putImageData(imageData,0,0);
    }

    oBtn2.onclick=function () {
     //获取像素区
     let imageData=gd.getImageData(0,0,oV.width,oV.height);

     //data[(r*W+c)*4]
     for(let r=0;r<oV.height;r++){
      for(let c=0;c<oV.width;c++){
       imageData.data[(r*oV.width+c)*4+2]=0;

0      }
     }
     gd.putImageData(imageData,0,0);
    }

    oBtn3.onclick=function () {
     //获取像素区
     let imageData=gd.getImageData(0,0,oV.width,oV.height);

     //data[(r*W+c)*4]
     for(let r=0;r<oV.height;r++){
      for(let c=0;c<oV.width;c++){
       imageData.data[(r*oV.width+c)*4]=0;
       imageData.data[(r*oV.width+c)*4+2]=0;
      }
     }
     gd.putImageData(imageData,0,0);
    }

    oBtn4.onclick=function () {
     //火狐支持,在火狐中点击导出图片会在新窗口打开图片
     let src=oV.toDataURL();
     window.open(src,"_blank");

    }



   }
  }


 </script>
</head>
<body>
<input type="button" value="变灰" id="btn1"/>
<input type="button" value="变黄" id="btn2"/>
<input type="button" value="变绿" id="btn3"/>
<input type="button" value="导出图片" id="btn4"/>
<canvas id="v1" width="800" height="600">
</canvas>
</body>
</html>

代码运行效果截图:该图为变黄效果。

js canvas实现画图、滤镜效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用于table内容排序
Jul 21 Javascript
javascript面向对象包装类Class封装类库剖析
Jan 24 Javascript
JavaScript中的style.display属性操作
Mar 27 Javascript
jquery 利用show和hidden实现级联菜单示例代码
Aug 09 Javascript
java和javascript获取word文档的书签位置对比
Jun 19 Javascript
JavaScript实现查找字符串中第一个不重复的字符
Dec 29 Javascript
Javascript实现获取及设置光标位置的方法
Jul 21 Javascript
AngularJS ng-bind-template 指令详解
Jul 30 Javascript
jQuery+json实现动态创建复杂表格table的方法
Oct 25 Javascript
React BootStrap用户体验框架快速上手
Mar 06 Javascript
js动态设置select下拉菜单的默认选中项实例
Aug 21 Javascript
JavaScript寄生组合式继承原理与用法分析
Jan 11 Javascript
js canvas画布实现高斯模糊效果
Nov 27 #Javascript
video.js 一个页面同时播放多个视频的实例代码
Nov 27 #Javascript
Vue数据双向绑定的深入探究
Nov 27 #Javascript
微信小程序带动画弹窗组件使用方法详解
Nov 27 #Javascript
微信小程序实现日历功能
Nov 27 #Javascript
微信小程序实现打卡日历功能
Sep 21 #Javascript
微信小程序实现时间预约功能
Nov 27 #Javascript
You might like
PHP 各种排序算法实现代码
2009/08/20 PHP
浅析memcache启动以及telnet命令详解
2013/06/28 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
PHP实现的简单适配器模式示例
2017/06/22 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
jquery-tips悬浮提示插件分享
2015/07/31 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
vue实现按钮切换图片
2021/01/20 Vue.js
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
Python操作Word批量生成文章的方法
2015/07/28 Python
django_orm查询性能优化方法
2018/08/20 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
Python跳出多重循环的方法示例
2019/07/03 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
市场营销工作计划书
2014/09/15 职场文书
2014年学生会工作总结
2014/11/07 职场文书
Python入门学习之类的相关知识总结
2021/05/25 Python
浅谈Redis的事件驱动模型
2022/05/30 Redis