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 相关文章推荐
图片延迟加载的实现代码(模仿懒惰)
Mar 29 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
Jun 16 Javascript
javascript中Date()函数在各浏览器中的显示效果
Jun 18 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
Nov 11 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
Apr 13 Javascript
基于JavaScript实现的折半查找算法示例
Apr 14 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
Sep 18 Javascript
vue2 前端搜索实现示例
Feb 26 Javascript
JS实现的透明度渐变动画效果示例
Apr 28 Javascript
微信小程序上传图片实例
May 28 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
Sep 20 Javascript
微信小程序实现点赞、取消点赞功能
Nov 02 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可能遇到的问题“无法载入mysql扩展” 的解决方法
2007/04/16 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
php抽象类用法实例分析
2015/07/07 PHP
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
新手常遇到的一些jquery问题整理
2010/08/16 Javascript
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
基于jQuery的JavaScript模版引擎JsRender使用指南
2014/12/29 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
vue实现记事本功能
2019/06/26 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
学习python可以干什么
2019/02/26 Python
python创造虚拟环境方法总结
2019/03/04 Python
Python中Numpy mat的使用详解
2019/05/24 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
蔻驰英国官网:COACH英国
2020/07/19 全球购物
学生党员思想汇报
2013/12/28 职场文书
2014年电话销售工作总结
2014/12/01 职场文书
教师聘用意向书
2015/05/11 职场文书
2015中学教学工作总结
2015/07/22 职场文书
学校运动会感想
2015/08/10 职场文书
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL