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 写类方式之八
Jul 05 Javascript
MyEclipse取消验证Js的两种方法
Nov 14 Javascript
jQuery+PHP打造滑动开关效果
Dec 16 Javascript
详解AngularJS中的作用域
Jun 17 Javascript
Bootstrap自定义文件上传下载样式
May 26 Javascript
原生js实现中奖信息无间隙滚动效果
Jan 18 Javascript
angularjs指令之绑定策略(@、=、&amp;)
Apr 13 Javascript
jQuery实现web页面樱花坠落的特效
Jun 01 jQuery
vue移动UI框架滑动加载数据的方法
Mar 12 Javascript
json字符串传到前台input的方法
Aug 06 Javascript
koa-passport实现本地验证的方法示例
Feb 20 Javascript
js实现九宫格布局效果
May 28 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 常用字符串函数总结
2008/03/15 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
CI(CodeIgniter)框架介绍
2014/06/09 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
Yii2基于Ajax自动获取表单数据的方法
2016/08/10 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
Redis构建分布式锁
2017/03/28 PHP
javascript 面向对象继承
2009/11/26 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
认识less和webstrom的less配置方法
2017/08/02 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
小小商店教学反思
2014/04/27 职场文书
2014年项目经理工作总结
2014/11/24 职场文书
2015年话务员工作总结
2015/04/29 职场文书
不同意离婚代理词
2015/05/23 职场文书
python中if和elif的区别介绍
2021/11/07 Python
Github 使用python对copilot做些简单使用测试
2022/04/14 Python
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS