新建一个html页面,在body tag之间加入

<canvas id="myCanvas">Gray Filter</canvas>  

  添加一段最简单的JavaScript 脚本

<pre name="code"class="javascript">window.onload = function() {
  var canvas = document.getElementById("myCanvas");
<span style="white-space:pre">  </span>// TODO: do something here
}

  从Canvas对象获取绘制对象上下文Context的代码如下:

var context = canvas.getContext("2d");

  在html页面中加入一幅图像的html代码如下

<img id="imageSource"src="hanjiaren.jpg"alt="Canvas Source"/>

  从html img对象中获取image 对象的javascript代码如下:

var image = document.getElementById("imageSource");

  将得到的图像绘制在Canvas对象中的代码如下:

context.drawImage(image, 0, 0);

  从Canvas对象中获取图像像素数据的代码如下:

var canvasData = context.getImageData(0, 0, canvas.width, canvas.height);

  读取像素值与实现灰度计算的代码如下:

for ( var x = 0; x < canvasData.width; x++) {
    for ( var y = 0; y < canvasData.height; y++) {

// Index of the pixel in the array
      var idx = (x + y * canvasData.width) * 4;
      var r = canvasData.data[idx + 0];
            var g = canvasData.data[idx + 1];
            var b = canvasData.data[idx + 2];
            
            // calculate gray scale value
            var gray = .299 * r + .587 * g + .114 * b;
            
      // assign gray scale value
      canvasData.data[idx + 0] = gray; // Red channel
      canvasData.data[idx + 1] = gray; // Green channel
      canvasData.data[idx + 2] = gray; // Blue channel
      canvasData.data[idx + 3] = 255; // Alpha channel
        
      // add black border
      if(x < 8 || y < 8 || x > (canvasData.width - 8) || y > (canvasData.height - 8)) 
      {
        canvasData.data[idx + 0] = 0;
        canvasData.data[idx + 1] = 0;
        canvasData.data[idx + 2] = 0;
      }
    }
  }

  其中计算灰度公式为 gray color = 0.299 × red color + 0.578 × green color + 0.114 * blue color

  读取出来的像素值顺序为RGBA 分别代表red color, green color, blue color, alpha channel

  处理完成的数据要重新载入到Canvas中。代码如下:

context.putImageData(canvasData, 0, 0);

  程序最终的效果如下:

  

  完全源代码如下:

<html>
<head>
<script>
  window.onload = function() {
    var canvas = document.getElementById("myCanvas");
    var image = document.getElementById("imageSource");
    
    // re-size the canvas deminsion
    canvas.width  = image.width;
    canvas.height = image.height;
    
    // get 2D render object
    var context = canvas.getContext("2d");
    context.drawImage(image, 0, 0);
    var canvasData = context.getImageData(0, 0, canvas.width, canvas.height);
    alert(canvasData.width.toString());
    alert(canvasData.height.toString());
    
    // gray filter
    for ( var x = 0; x < canvasData.width; x++) {
      for ( var y = 0; y < canvasData.height; y++) {

// Index of the pixel in the array
        var idx = (x + y * canvasData.width) * 4;
        var r = canvasData.data[idx + 0];
            var g = canvasData.data[idx + 1];
            var b = canvasData.data[idx + 2];
            
            // calculate gray scale value
            var gray = .299 * r + .587 * g + .114 * b;
            
        // assign gray scale value
        canvasData.data[idx + 0] = gray; // Red channel
        canvasData.data[idx + 1] = gray; // Green channel
        canvasData.data[idx + 2] = gray; // Blue channel
        canvasData.data[idx + 3] = 255; // Alpha channel
        
        // add black border
        if(x < 8 || y < 8 || x > (canvasData.width - 8) || y > (canvasData.height - 8)) 
        {
          canvasData.data[idx + 0] = 0;
          canvasData.data[idx + 1] = 0;
          canvasData.data[idx + 2] = 0;
        }
      }
    }
    context.putImageData(canvasData, 0, 0); // at coords 0,0
  };
</script>
</head>
<body>
  <h2>Hello World!</h2>
  <img id="imageSource" src="hanjiaren.jpg" alt="Canvas Source" />
  <br />
  <canvas id="myCanvas" >Gray Filter</canvas>
</body>
</html>

  代码中的文件可以替换任意你想要看到的图片文件

  HTML5, 原来如此神奇。程序在google浏览器中测试通过,

  最后的忠告,千万不要在本地尝试运行上面的代码,google浏览器的安全检查会自动阻止从浏览器中读写非domain的文件

  最好在tomcat或者任意个web container的server上发布以后从google浏览器查看效果即可。

  本文来自jia20003的博客,原文地址:http://blog.csdn.net/jia20003/article/details/7228464

转载于:https://www.cnblogs.com/top5/archive/2013/04/20/3033041.html

HTML5 组件Canvas实现图像灰度化相关推荐

  1. html5图片灰度显示,HTML5 组件Canvas实现图像灰度化

    HTML5发布已经有很长一段时间了,一直以来从来没有仔细的看过,过年刚来随便看看 发现HTML5中的Canvas组件功能是如此的强大,不怪很多牛人预言Flash已死,死不死 不是我要关心的,我关心的C ...

  2. [Python图像处理] 十四.基于OpenCV和像素处理的图像灰度化处理

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  3. c#图像灰度化、灰度反转、二值化

    图像灰度化: 将彩色图像转化成为灰度图像的过程成为图像的灰度化处理.彩色图像中的每个像素的颜色有R.G.B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*2 ...

  4. 2种图像增强方法:图像点运算和图像灰度化处理

    摘要:本文主要讲解图像点运算的灰度化处理,详细介绍常用的灰度化处理方法,并分享了图像颜色空间相互转换,以及三种灰度转换算法的实现. 本文分享自华为云社区<[Python从零到壹] 四十三.图像增 ...

  5. MATLAB:虹膜识别的图像灰度化处理,直方图均衡化

    (1)图像灰度化处理: 读取一张图片之后,进行灰度化处理,然后对其进行直方图均值化. clear;close all %读取原图地址 RGB= imread('D:\img\1.jpg'); %图像灰 ...

  6. 图像灰度化的三种方法(matlab、C++、Python实现)

    灰度化处理就是将一幅色彩图像转化为灰度图像的过程.彩色图像分为R,G,B三个分量,分别显示出红绿蓝等各种颜色,灰度化就是使彩色的R,G,B分量相等的过程.灰度值大的像素点比较亮(像素值最大为255,为 ...

  7. CUDA精进之路(三):图像处理——图像灰度化、灰度直方图统计

    引言 在大部分的图像处理程序中,其中必不可少的一步就是对传入的彩图进行灰度处理,将三个通道的RGB图片转化为单通道的Gray图,而对于灰度图进行直方图统计同样是观察检测图像特征的常用方法.在OpenC ...

  8. 【python图像处理】图像灰度化处理、图像灰度线性变换、图像灰度非线性变换

    一.图像灰度化处理 1.最大值灰度处理方法 2.平均灰度处理方法 3.加权平均灰度处理方法 二.图像灰度线性变换 1.图像灰度上移变换 2.图像对比度增强变换 3.图像对比度减弱变换 4.图像灰度反色 ...

  9. 图像灰度化的三种常见方法源码

    图像灰度化是图像处理很基础的一部分,在这里给出图像灰度化的三种常见方法的M源码,以供大家参考~ 平均值法,最大值法,加权平均值法 function f=MyGrayProcessing(Img) [m ...

最新文章

  1. python经典100例答案pdf-Python3基础训练经典100题(带答案)下载
  2. Apache Kafka-AckMode最佳实践
  3. php信息采集开发,程序php信息采集程序代码
  4. R语言版本查询以及line 1 of `undefined.cases': bad value of `47.25' for attribute `A2'的解决
  5. QQuickRenderControl
  6. 月入10w+的offer,变成了整容、传销、网红届的韭菜
  7. 划分子网后的三级结构
  8. 不同类型特征变量之间相关性分析
  9. PHP里面最难的是那部分,那个PHP中号称最难的‘递归函数’
  10. golang 安装 guru vscode 安装失败
  11. 10、斐波那契数列,跳台阶问题(Python)
  12. ZK 数据传输四:BackingBean获取spring层类再获取数据(jsp页面或zul页面)
  13. 7.5日chinapub生日聚会
  14. 大数据 流式计算 apache storm 学习笔记 01 ---汪文君
  15. mysql如何批量添加数据_mysql如何大批量插入数据 mysql大批量插入数据4种方法
  16. 塔尔寺景点门票销售管理系统
  17. ICIP论文结构整理
  18. Windows 端口代理配置(Netsh)
  19. The remote end hung up unexpectedly The remote end hung up unexpectedly RPC failed;
  20. kindle使用入门

热门文章

  1. r语言和python-R VS Python:R语言是否真的过时了?
  2. python利器的使用-Python数据科学利器
  3. 零基础学编程学java还是python-零基础学编程,Java和Python你pick谁?
  4. python课程是学什么的-Python课程包括哪些内容?
  5. python官网如何调中文-django的settings中设置中文支持的实现
  6. python里面temp是啥-Python模块学习:tempfile 临时文件(夹)操作
  7. python小程序-整理了适合新手的20个Python练手小程序
  8. Java的ArrayList集合_JAVA之ArrayList集合
  9. redis中的ziplist
  10. LeetCode Count Primes