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 相关文章推荐
jQuery实现用户注册的表单验证示例
Aug 28 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
Nov 30 Javascript
调试代码导致IE出错的避免方法
Apr 04 Javascript
JavaScript将字符串转换为整数的方法
Apr 14 Javascript
JQuery中基础过滤选择器用法实例分析
May 18 Javascript
AngularJS控制器之间的通信方式详解
Nov 03 Javascript
canvas绘图不清晰的解决方案
Feb 28 Javascript
Vue加载json文件的方法简单示例
Jan 28 Javascript
如何提升vue.js中大型数据的性能
Jun 21 Javascript
Node.js系列之发起get/post请求(2)
Aug 30 Javascript
让mocha支持ES6模块的方法实现
Jan 14 Javascript
React四级菜单的实现
Apr 08 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字符串过滤,转换函数代码
2012/05/01 PHP
php常用数学函数汇总
2014/11/21 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
2019/09/29 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
js获取域名的方法
2015/01/27 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
JavaScript实现打开链接页面的方式汇总
2016/06/02 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
Python线程中对join方法的运用的教程
2015/04/09 Python
python Pygame的具体使用讲解
2017/11/03 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
Django的CVB实例详解
2020/02/10 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
Python-openCV开运算实例
2020/07/05 Python
python 怎样进行内存管理
2020/11/10 Python
餐厅经理岗位职责范本
2014/02/17 职场文书
新任教师自我鉴定
2014/02/24 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
银行先进个人总结
2015/02/15 职场文书
师范生见习总结范文
2015/06/23 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python
Python pandas求方差和标准差的方法实例
2021/08/04 Python
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers