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 兼容鼠标滚轮事件
Apr 07 Javascript
Javascript 多物体运动的实现
Dec 24 Javascript
JavaScript数组和循环详解
Apr 27 Javascript
JavaScript中cookie工具函数封装的示例代码
Oct 11 Javascript
Bootstrap导航中表单简单实现代码
Mar 06 Javascript
Vue路由跳转问题记录详解
Jun 15 Javascript
js实现可以点击收缩或张开的悬浮窗
Sep 18 Javascript
js中的reduce()函数讲解
Jan 18 Javascript
mocha的时序规则讲解
Feb 16 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
Apr 10 Javascript
通过实例解析js简易模块加载器
Jun 17 Javascript
一道JS算法面试题——冒泡、选择排序
Apr 21 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版(3)
2006/10/09 PHP
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
php实现的RSS生成类实例
2015/04/23 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
JS 图片缩放效果代码
2010/06/09 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
jQuery完成表单验证的实例代码(纯代码)
2017/09/30 jQuery
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
Vue单页及多页应用全局配置404页面实践记录
2018/05/22 Javascript
深入理解NodeJS 多进程和集群
2018/10/17 NodeJs
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
pandas 对group进行聚合的例子
2019/12/27 Python
Numpy数组的广播机制的实现
2020/11/03 Python
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
人力资源经理的岗位职责
2014/03/02 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
二手车转让协议书
2015/01/29 职场文书
财政局个人年终总结
2015/03/03 职场文书
现役军人家属慰问信
2015/03/24 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers