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 相关文章推荐
可以用鼠标拖动的DIV实现思路及代码
Oct 21 Javascript
JS滚轮事件onmousewheel使用介绍
Nov 01 Javascript
jQuery新的事件绑定机制on()示例应用
Jul 18 Javascript
AngularJS基础知识笔记之表格
May 10 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
Dec 23 Javascript
jQuery+CSS3实现点赞功能
Mar 13 Javascript
总结js中的一些兼容性易错的问题
Dec 18 Javascript
Vue动态获取width的方法
Aug 22 Javascript
解决vue同一slot在组件中渲染多次的问题
Sep 06 Javascript
使vue实现jQuery调用的两种方法
May 12 jQuery
解决layer 动态加载select 失效的问题
Sep 18 Javascript
ES2020 新特性(种草)
Jan 12 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中for循环语句的几种变型
2006/11/26 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
JS中的作用域链
2017/03/01 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
关于vue表单提交防双/多击的例子
2019/10/31 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Python中的super用法详解
2015/05/28 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
Python3使用tesserocr识别字母数字验证码的实现
2021/01/29 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
校长先进事迹材料
2014/02/01 职场文书
大学校运会广播稿
2014/02/03 职场文书
小学生暑假家长评语
2014/04/17 职场文书
科长个人四风问题整改措施思想汇报
2014/10/13 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
个人收入证明范本
2015/06/12 职场文书
Python自动化测试PO模型封装过程详解
2021/06/22 Python
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL