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 相关文章推荐
javascript oop开发滑动(slide)菜单控件
Aug 25 Javascript
JavaScript模板入门介绍
Sep 26 Javascript
JavaScript全排列的六种算法 具体实现
Jun 29 Javascript
JavaScript 上万关键字瞬间匹配实现代码
Jul 07 Javascript
JS表的模拟方法
Feb 05 Javascript
JavaScript数据类型之基本类型和引用类型的值
Apr 01 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
Mar 21 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
Oct 21 Javascript
Bootstrap CSS使用方法
Dec 23 Javascript
详解JS中的快速排序与冒泡
Jan 10 Javascript
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
Apr 19 Javascript
在vue项目中使用sass语法问题
Jul 18 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 SQLite类
2009/05/07 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
php页面函数设置超时限制的方法
2014/12/01 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
Javascript 遍历页面text控件详解
2014/01/06 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
js微信分享API
2020/10/11 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
javascript匿名函数中的'return function()'作用
2018/10/15 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
Python调用C++程序的方法详解
2017/01/24 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
Python 中如何使用 virtualenv 管理虚拟环境
2021/01/21 Python
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
应届毕业生求职信范文
2013/12/18 职场文书
硕士生工作推荐信
2014/03/07 职场文书
行政助理岗位职责
2015/02/10 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书