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 相关文章推荐
JS 分号引起的一段调试问题
Jun 18 Javascript
JS 对象介绍
Jan 20 Javascript
JavaScript中的prototype使用说明
Apr 13 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
Jun 05 Javascript
jQuery操作元素css样式的三种方法
Jun 04 Javascript
浅谈javascript中的instanceof和typeof
Feb 27 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
Nov 18 Javascript
JS弹性运动实现方法分析
Dec 15 Javascript
基于JavaScript实现无限加载瀑布流
Jul 21 Javascript
jQuery 开发之EasyUI 添加数据的实例
Sep 26 jQuery
基于openlayers4实现点的扩散效果
Aug 17 Javascript
浅谈React中组件逻辑复用的那些事儿
May 21 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-5.2 的 php.ini 中文版[金步国翻译]
2011/04/17 PHP
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
Highcharts学习之数据列
2016/08/03 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
2017/09/05 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
如何将python中的List转化成dictionary
2016/08/15 Python
Python生成随机数组的方法小结
2017/04/15 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
Python调用C语言程序方法解析
2020/07/07 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
2020/08/31 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
写给保洁员表扬信
2014/01/08 职场文书
新学期校长寄语
2014/01/18 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
协议书的格式
2014/04/23 职场文书
国庆节促销广告语2014
2014/09/19 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
格列佛游记读书笔记
2015/06/30 职场文书