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 技巧和窍门整理(8个)
Apr 22 Javascript
jQuery对html元素取值与赋值的方法
Nov 20 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
Jun 05 Javascript
使用js画图之圆、弧、扇形
Jan 12 Javascript
jquery序列化方法实例分析
Jun 10 Javascript
jQuery图片轮播功能实例代码
Jan 29 Javascript
vue获取当前点击的元素并传值的实例
Mar 09 Javascript
iview table高度动态设置方法
Mar 14 Javascript
修改npm全局安装模式的路径方法
May 15 Javascript
Vue项目安装插件并保存
Jan 28 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
Aug 11 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
Oct 09 jQuery
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封装的HttpClient类用法实例
2015/06/17 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
php实现等比例压缩图片
2018/07/26 PHP
Laravel5.4框架中视图共享数据的方法详解
2019/09/05 PHP
jQuery的强大选择器小结
2009/12/27 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
python实现网页链接提取的方法分享
2014/02/25 Python
Python实现网站注册验证码生成类
2017/06/08 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
Python模拟FTP文件服务器的操作方法
2020/02/18 Python
python 串行执行和并行执行实例
2020/04/30 Python
python实现不同数据库间数据同步功能
2021/02/25 Python
size?德国官方网站:英国伦敦的球鞋精品店
2018/03/17 全球购物
AJAX应用和传统Web应用有什么不同
2013/08/24 面试题
水电工岗位职责
2014/02/12 职场文书
理工学院学生自我鉴定
2014/02/23 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
教育见习报告范文
2014/11/03 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
python 调用js的四种方式
2021/04/11 Python
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL