canvas的神奇用法


Posted in Javascript onFebruary 03, 2017

canvas有一个神奇的方法getImageData这个玩意。它可以获取canvas内图像的没一个像素点的颜色值获取,而且可以改变。

如果你有各种滤镜的算法。那么用canvas就可以实现图片的滤镜转化,可以做成类似美图秀秀那样的功能。

使用方法:

1:先将图片导入画布。

2:var canvasData = context.getImageData(0, 0, canvas.width, canvas.height);  //用这个将图片每个像素点的信息获取出来,得到一个数组。注意得到的信息不是[[r,g,b,a],[r,g,b,a]]这样的二维数组而是[r,g,b,a,r,g,b,a]这样的按rgba顺序排列的单个的数组。

3:这一步就是开始将每个像素的rgba改变。这里简单介绍一下灰度效果的算法及实现步骤。

function gray(canvasData)
{
for ( var x = 0; x < canvasData.width; x++) {
 for ( var y = 0; y < canvasData.height; y++) {
 // Index of the pixel in the array
 var idx = (x + y * canvasData.width) * 4;
 var r = canvasData.data[idx + 0];
 var g = canvasData.data[idx + 1];
 var b = canvasData.data[idx + 2];
 var gray = .299 * r + .587 * g + .114 * b;
 // assign gray scale value
 canvasData.data[idx + 0] = gray; // Red channel
 canvasData.data[idx + 1] = gray; // Green channel
 canvasData.data[idx + 2] = gray; // Blue channel
 canvasData.data[idx + 3] = 255; // Alpha channel
 // add black border
 if(x < 8 || y < 8 || x > (canvasData.width - 8) || y > (canvasData.height - 8)) 
 {
  canvasData.data[idx + 0] = 0;
  canvasData.data[idx + 1] = 0;
  canvasData.data[idx + 2] = 0;
 }
 }
}
return canvasData;
}

4:context.putImageData(canvasData, 0, 0); //处理完像素颜色值之后,记得要这一句将画布重绘

这些个代码就是将图片转化为黑白效果的代码,具体可以实现多少效果就得看你掌握的滤镜算法有多少了。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript实现按照指定长度为数字前面补零输出的方法
Mar 19 Javascript
AngularJS的内置过滤器详解
May 14 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
Aug 25 Javascript
js创建对象几种方式的优缺点对比
Sep 28 Javascript
javascript中apply/call和bind的使用
Feb 15 Javascript
JavaScript中的return布尔值的用法和原理解析
Aug 14 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
Jul 12 Javascript
react+ant design实现Table的增、删、改的示例代码
Dec 27 Javascript
微信小程序实现左侧滑栏过程解析
Aug 26 Javascript
基于js判断浏览器是否支持webGL
Apr 18 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
Aug 06 Javascript
深入讲解Vue中父子组件通信与事件触发
Mar 22 Vue.js
Jquery实现跨域异步上传文件总结
Feb 03 #Javascript
js 递归和定时器的实例解析
Feb 03 #Javascript
js实现文本上下来回滚动
Feb 03 #Javascript
jquery代码规范让代码越来越好看
Feb 03 #Javascript
Javascript for in的缺陷总结
Feb 03 #Javascript
canvas绘制七巧板
Feb 03 #Javascript
JS对象是否拥有某属性如何判断
Feb 03 #Javascript
You might like
PHP获取MAC地址的函数代码
2011/09/11 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
javascript 节点遍历函数
2010/03/28 Javascript
javascript根据时间生成m位随机数最大13位
2014/10/30 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
JS判断字符串是否为整数的方法--简单的正则判断
2018/07/23 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
2018/08/16 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
微信小程序实现的一键复制功能示例
2019/04/24 Javascript
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
vue v-model的用法解析
2020/10/19 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
python threading模块操作多线程介绍
2015/04/08 Python
浅谈python迭代器
2017/11/08 Python
详解Python自建logging模块
2018/01/29 Python
对python生成业务报表的实例详解
2019/02/03 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
python中pip的使用和修改下载源的方法
2019/07/08 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
酒店销售主管岗位职责
2014/01/04 职场文书
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
文体活动总结范文
2014/05/05 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
python tqdm用法及实例详解
2021/06/16 Python