JavaScript实现256色转灰度图


Posted in Javascript onFebruary 22, 2017

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

灰度化方法:

        1.浮点算法:Gray = R*0.299 + G*0.587 + B*0.114

        2.整数方法:Gray = (R*299 + G*587 + B*114 + 500) / 1000 

        3.移位方法:Gray =(R*28+G*151+B*77)>>8;

        4.平均值法:Gray=(R+G+B)/3;

        5.仅取绿色:Gray=G;

        只要将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的RGB(Gray,Gray,Gray)就完成灰度化了;

效果图:

JavaScript实现256色转灰度图

代码如下:

<!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="Convert256toGray()"/>
 <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 Convert256toGray(){
 var c=document.getElementById("canvas");
 var ctx=c.getContext("2d");
 var imgData = ctx.getImageData(0,0,c_w,c_h);
 for (var i=0;i<imgData.data.length;i+=4)
  {
  var R = imgData.data[i]; //R(0-255)
  var G = imgData.data[i+1]; //G(0-255)
  var B = imgData.data[i+2]; //G(0-255)
  var Alpha = imgData.data[i+3]; //Alpha(0-255)
  //浮点算法
  var gray = R*0.299 + G*0.587 + B*0.114;
  //整数算法
//  var gray = (R*299 + G*587 + B*114 + 500) / 1000; 
  //移位算法
//  var gray =(R*76+G*151+B*28)>>8;
  //平均值算法
//   var gray = (R+G+B)/3;
  //仅取绿色
//  var gray=G;
   imgData.data[i] = gray;
   imgData.data[i+1] = gray; 
   imgData.data[i+2] = gray; 
   imgData.data[i+3] = Alpha; 
  }
 ctx.putImageData(imgData,0,0);
 }
 </script>
 <!--base-->
 <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不兼容input的change事件问题解决过程
Dec 05 Javascript
jQuery ajax时间差导致的变量赋值问题分析
Jan 22 Javascript
Bootstrap学习笔记之js组件(4)
Jun 12 Javascript
Node.js中使用jQuery的做法
Aug 17 Javascript
jQuery DOM节点的遍历方法小结
Aug 15 jQuery
jQuery实现广告条滚动效果
Aug 22 jQuery
浅谈vue,angular,react数据双向绑定原理分析
Nov 28 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
Aug 24 Javascript
JavaScript实现图片放大镜效果
Jun 27 Javascript
JS如何寻找数组中心索引过程解析
Jun 01 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
Jan 29 Javascript
Vue实现圆环进度条的示例
Feb 06 Vue.js
在javascript中,null>=0 为真,null==0却为假,null的值详解
Feb 22 #Javascript
微信小程序 扎金花简单实例
Feb 21 #Javascript
angular中的http拦截器Interceptors的实现
Feb 21 #Javascript
微信小程序 PHP生成带参数二维码
Feb 21 #Javascript
vue-resource 拦截器使用详解
Feb 21 #Javascript
微信小程序 template模板详解及实例
Feb 21 #Javascript
Bootstrap 3 按钮标签实例代码
Feb 21 #Javascript
You might like
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
PHP4.04简明安装
2006/10/09 PHP
php网上商城购物车设计代码分享
2012/02/15 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
javascript FormatNumber函数实现方法
2008/12/30 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
jquery实现的简单二级菜单效果代码
2015/09/22 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
用python代码做configure文件
2014/07/20 Python
Python上下文管理器和with块详解
2017/09/09 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
简单了解python调用其他脚本方法实例
2020/03/26 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
Python中常见的数制转换有哪些
2020/05/27 Python
Python 实现简单的客户端认证
2020/07/29 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
毕业生自我推荐
2013/11/04 职场文书
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
旅游节目策划方案
2014/05/26 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
2015年超市员工工作总结
2015/05/04 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android