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 相关文章推荐
innerHTML与jquery里的html()区别介绍
Oct 12 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
Aug 27 Javascript
jQuery制作拼图小游戏
Jan 12 Javascript
每天一篇javascript学习小结(Array数组)
Nov 11 Javascript
Jquery实现纵向横向菜单
Jan 24 Javascript
jQuery 实现评论等级好评差评特效
May 06 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
Dec 04 Javascript
原生JS实现图片翻书效果
Feb 16 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
Jun 14 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
Sep 19 Javascript
详解使用angular框架离线你的应用(pwa指南)
Jan 31 Javascript
angular使用md5,CryptoJS des加密的方法
Jun 03 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 和 COM
2006/10/09 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
jquery 插件学习(三)
2012/08/06 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
2016/07/12 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
js省市区级联查询(插件版&amp;无插件版)
2017/03/21 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
Python和Go语言的区别总结
2019/02/20 Python
Python的高阶函数用法实例分析
2019/04/11 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
CSS3弹性盒模型开发笔记(三)
2016/04/26 HTML / CSS
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
浅谈CSS3中的变形功能-transform功能
2017/12/27 HTML / CSS
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
店面销售职位的职责
2014/03/09 职场文书
五好关工委申报材料
2014/05/31 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
《葡萄沟》教学反思
2016/02/23 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript
Python中文分词库jieba(结巴分词)详细使用介绍
2022/04/07 Python