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 相关文章推荐
jQuery 相关控件的事件操作分解
Aug 03 Javascript
图片Slider 带左右按钮的js示例
Aug 30 Javascript
Angular中的Promise对象($q介绍)
Mar 03 Javascript
javascript常用正则表达式汇总
Jul 31 Javascript
JavaScript中获取纯正的undefined的方法
Mar 06 Javascript
AngularJs学习第八篇 过滤器filter创建
Jun 08 Javascript
mvc中form表单提交的三种方式(推荐)
Aug 10 Javascript
vue.js 初体验之Chrome 插件开发实录
May 13 Javascript
详解vue 实例方法和数据
Oct 23 Javascript
layer弹出层父子页面事件相互调用方法
Aug 17 Javascript
20个必会的JavaScript面试题(小结)
Jul 02 Javascript
解决Vue项目中tff报错的问题
Oct 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之生成GIF动画的实现方法
2013/06/07 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
2017/09/01 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
Vue.js 父子组件通信的十种方式
2018/10/30 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
python实现机器学习之多元线性回归
2018/09/06 Python
python 解压pkl文件的方法
2018/10/25 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
大学生自我评价怎样写好
2013/10/23 职场文书
学校卫生检查制度
2014/02/03 职场文书
艺术节主持词
2014/04/02 职场文书
建筑工地门卫岗位职责
2014/04/30 职场文书
年终考核实施方案
2014/05/26 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技