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 相关文章推荐
分析 JavaScript 中令人困惑的变量赋值
Aug 13 Javascript
一个javascript参数的小问题
Mar 02 Javascript
扩展jQuery 键盘事件的几个基本方法
Oct 30 Javascript
jquery操作对象数组元素方法详解
Nov 26 Javascript
JS获取鼠标相对位置的方法
Sep 20 Javascript
AngularJS入门教程之数据绑定用法示例
Nov 01 Javascript
jquery实现input框获取焦点的方法
Feb 06 Javascript
基于jQuery实现弹幕APP
Feb 10 Javascript
js最简单的双向绑定实例讲解
Jan 02 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
Sep 11 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
Nov 11 Javascript
vue组件添加事件@click.native操作
Oct 30 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 session常见问题集锦及解决办法总结
2007/03/18 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
用javascript实现自定义标签
2007/05/08 Javascript
document.compatMode介绍
2009/05/21 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
nodejs开发一个最简单的web服务器实例讲解
2020/01/02 NodeJs
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
python删除列表内容
2015/08/04 Python
python3.4用函数操作mysql5.7数据库
2017/06/23 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
pycharm配置git(图文教程)
2019/08/16 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
大学活动策划书范文
2014/01/10 职场文书
大学生优秀自荐信范文
2014/02/25 职场文书
医学生就业推荐表自我鉴定
2014/03/26 职场文书
励志演讲稿范文
2014/04/29 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
公司2015年终工作总结
2015/05/26 职场文书
django学习之ajax post传参的2种格式实例
2021/05/14 Python
python3实现常见的排序算法(示例代码)
2021/07/04 Python