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 相关文章推荐
使用jquery动态加载Js文件和Css文件
Oct 24 Javascript
jquery中ajax处理跨域的三大方式
Jan 05 Javascript
关于JS中的方法是否加括号的问题
Jul 27 Javascript
BootStrapValidator初使用教程详解
Feb 10 Javascript
老生常谈combobox和combotree模糊查询
Apr 17 Javascript
js 概率计算(简单版)
Sep 12 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
Sep 29 Javascript
jQuery轮播图实例详解
Aug 15 jQuery
深入浅析Vue中mixin和extend的区别和使用场景
Aug 01 Javascript
小程序和web画三角形实现解析
Sep 02 Javascript
JavaScript多种滤镜算法实现代码实例
Dec 10 Javascript
Vue路由切换页面不更新问题解决方案
Jul 10 Javascript
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网站提速三大“软”招
2006/10/09 PHP
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
ajax异步刷新实现更新数据库
2012/12/03 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
vue源码入口文件分析(推荐)
2018/01/30 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
Python完全新手教程
2007/02/08 Python
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
Python中pygal绘制雷达图代码分享
2017/12/07 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
高级人员简历的自我评价分享
2013/11/03 职场文书
党的群众路线教育实践活动动员会主持词
2014/03/20 职场文书
电子商务专业自荐信
2014/06/02 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
Python 循环读取数据内存不足的解决方案
2021/05/25 Python