JavaScript实现图像模糊化的方法实例


Posted in Javascript onJanuary 15, 2017

前言

众所周知一幅完整的图像,是由红色、绿色、蓝色三个通道组成的。红色、绿色、蓝色三个通道的缩览图都是以灰度显示的。用不同的灰度色阶来表示" 红,绿,蓝"在图像中的比重。通道中的纯白,代表了该色光在此处为最高亮度,亮度级别是255。

模糊化方法:

就是将一个像素点的R(G,B)和它周围像素点的R(G,B)取出,然后取平均值再赋给这个像素点的R(G,B);这样就完成模糊化了;

例:

       1        2        3

       4        5        6

       7        8        9

       比如这个像素点5,把5像素点和周围的8个像素点(1,2,3,4,6,7,8,9)的R(G,B)取出,取这9个点的平均值然后赋给5像素点

       R(5) = (R1+R2+R3+R4+R5+R6+R7+R8+R9)/9;

       G(5) = (G1+G2+G3+G4+G5+G6+G7+G8+G9)/9;

       B(5) = (B1+B2+B3+B4+B5+B6+B7+B8+B9)/9;

效果图:

JavaScript实现图像模糊化的方法实例

实例代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>ImgBase</title>
		<style type="text/css">
			.scream{
				width:400px;
				height:300px;
				position: absolute;
				top:60px;
				border: 1px solid;
			}
			#canvas{
				position: absolute;
				top:60px;
				left:500px;
				border: 1px dashed;
			}
		</style>
	</head>
	<body>
		<input type="file" onchange="loadImg()"/>
		<input type="button" value="模糊化" onclick="Fuzzy()"/>
		<br/><br/>
		<div class="scream">
			<img id="scream" width="400px" height="300px" alt="Image preview...">
		</div>
		<canvas id="canvas" width="400px;" height="300px;">
			your browser does not support canvas!
		</canvas>
		
		<script>
			function Fuzzy(){
				var c=document.getElementById("canvas");
			 var ctx=c.getContext("2d");
			 var imgData=ctx.getImageData(0,0,c.width,c.height);
			 var img_w = imgData.width;
			 var img_h = imgData.height;
			 
			 for(var w=1;w<(img_w-1);w++){
			 	for(var h=1;h<(img_h-1);h++){
			 		//起始点
			 		var i = (w+img_w*h)*4;
			 		var R = imgData.data[i-1604]+imgData.data[i-1600]+imgData.data[i-1596]+imgData.data[i-4]+imgData.data[i]
			 		+imgData.data[i+4]+imgData.data[i+1596]+imgData.data[i+1600]+imgData.data[i+1604];	//R(0-255)
				 	var G = imgData.data[i-1603]+imgData.data[i-1599]+imgData.data[i-1595]+imgData.data[i-3]+imgData.data[i+1]
			 		+imgData.data[i+5]+imgData.data[i+1597]+imgData.data[i+1601]+imgData.data[i+1605];	//G(0-255)
				 	var B = imgData.data[i-1602]+imgData.data[i-1598]+imgData.data[i-1594]+imgData.data[i-2]+imgData.data[i+2]
			 		+imgData.data[i+6]+imgData.data[i+1598]+imgData.data[i+1602]+imgData.data[i+1606];;	//G(0-255)
				 	var Alpha = imgData.data[i+3];	//Alpha(0-255)
		 	
				 	imgData.data[i] = R/9;
				  imgData.data[i+1] = G/9;	
				  imgData.data[i+2] = B/9;	
				  imgData.data[i+3] = Alpha;	
			 	}
			 }
			 ctx.putImageData(imgData,0,0);
			}
		</script>
		<script>
			//canvas图像的宽高 
			var c_w = 400; var c_h = 300;
			//加载img图像
			function loadImg(){
				var img = document.getElementById("scream");
				var file = document.querySelector('input[type=file]').files[0];
				if(!/image\/\w+/.test(file.type)){
			  alert("文件必须为图片!");
			  return false;
			 }
				var reader = new FileReader();
				reader.addEventListener("load", function () {
				 img.src = reader.result;
				}, false);
				
				if(file) {
					reader.readAsDataURL(file);
					loadCanvas();
				}
			}
			//加载canvas图像
			function loadCanvas(){
				var c=document.getElementById("canvas");
				var ctx=c.getContext("2d");
				
				var img = document.getElementById("scream");
				img.onload = function() {
					ctx.drawImage(img,0,0,c_w,c_h);
				} 
			}
		</script>
	</body>
</html>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
关于实现代码语法标亮 dp.SyntaxHighlighter
Feb 02 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
Jan 29 Javascript
JS返回iframe中frameBorder属性值的方法
Apr 01 Javascript
javascript实现捕捉键盘上按下的键
May 05 Javascript
详解Javascript事件驱动编程
Jan 03 Javascript
AngularJS自定义插件实现网站用户引导功能示例
Nov 07 Javascript
jQuery中页面返回顶部的方法总结
Dec 30 Javascript
微信小程序 首页制作简单实例
Apr 07 Javascript
vue动态生成dom并且自动绑定事件
Apr 19 Javascript
vue基于Vue2.0和高德地图的地图组件实例
Apr 28 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
Apr 28 Javascript
解决layer 动态加载select 失效的问题
Sep 18 Javascript
vue实现简单实时汇率计算功能
Jan 15 #Javascript
bootstrap——bootstrapTable实现隐藏列的示例
Jan 14 #Javascript
JS轮播图中缓动函数的封装
Nov 25 #Javascript
JavaScript字符串对象
Jan 14 #Javascript
jquery mobile移动端幻灯片滑动切换效果
Apr 15 #Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
Jan 14 #Javascript
jQuery实现select模糊查询(反射机制)
Jan 14 #Javascript
You might like
php设计模式 Strategy(策略模式)
2011/06/26 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
BootStrap智能表单实战系列(七)验证的支持
2016/06/13 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
Python之用户输入的实例
2018/06/22 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
完美解决IE8下不兼容rgba()的问题
2017/03/31 HTML / CSS
机械专业个人求职自荐信格式
2013/09/21 职场文书
临床医学大学生求职信
2013/09/28 职场文书
建设投标担保书
2014/05/13 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
社区结对共建协议书
2016/03/23 职场文书
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA