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中eval函数的使用方法与示例
Apr 09 Javascript
js获取url中指定参数值的示例代码
Dec 14 Javascript
无限树Jquery插件zTree的常用功能特性总结
Sep 11 Javascript
在JavaScript中访问字符串的子串
Jul 07 Javascript
javascript实现树形菜单的方法
Jul 17 Javascript
JavaScript实现经典排序算法之冒泡排序
Dec 28 Javascript
谈谈JS中的!!
Dec 07 Javascript
深入浅析Vue.js计算属性和侦听器
May 05 Javascript
jQuery实现图片简单轮播功能示例
Aug 13 jQuery
Vue.directive使用注意(小结)
Aug 31 Javascript
在vue中根据光标的显示与消失实现下拉列表
Sep 29 Javascript
JS三级联动代码格式实例详解
Dec 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 define()函数以及defined()函数的用法详解
2013/06/05 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
js 字符串转换成数字的三种方法
2013/03/23 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
JS实现显示当前日期的实例代码
2018/07/03 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
2018/09/26 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
python使用fork实现守护进程的方法
2017/11/16 Python
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
python远程连接MySQL数据库
2019/04/19 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
英国购买威士忌网站:Master of Malt
2019/09/26 全球购物
生产车间班组长岗位职责
2014/01/06 职场文书
单位实习证明怎么写
2014/01/17 职场文书
购房协议书
2014/04/11 职场文书
啦啦队口号大全
2014/06/16 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
仓库管理制度范本
2015/08/04 职场文书
课程设计感想范文
2015/08/11 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
2019 入党申请书范文
2019/07/10 职场文书
python基于tkinter制作下班倒计时工具
2021/04/28 Python
关于MySQL中的 like操作符详情
2021/11/17 MySQL
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript