HTML5 组件Canvas实现图像灰度化
新建一个html页面,在body tag之间加入
添加一段最简单的JavaScript 脚本
var canvas = document.getElementById("myCanvas");
}
从Canvas对象获取绘制对象上下文Context的代码如下:
在html页面中加入一幅图像的html代码如下
从html img对象中获取image 对象的javascript代码如下:
将得到的图像绘制在Canvas对象中的代码如下:
从Canvas对象中获取图像像素数据的代码如下:
读取像素值与实现灰度计算的代码如下:
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中。代码如下:
程序最终的效果如下:
完全源代码如下:
<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实现图像灰度化相关推荐
- html5图片灰度显示,HTML5 组件Canvas实现图像灰度化
HTML5发布已经有很长一段时间了,一直以来从来没有仔细的看过,过年刚来随便看看 发现HTML5中的Canvas组件功能是如此的强大,不怪很多牛人预言Flash已死,死不死 不是我要关心的,我关心的C ...
- [Python图像处理] 十四.基于OpenCV和像素处理的图像灰度化处理
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- c#图像灰度化、灰度反转、二值化
图像灰度化: 将彩色图像转化成为灰度图像的过程成为图像的灰度化处理.彩色图像中的每个像素的颜色有R.G.B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*2 ...
- 2种图像增强方法:图像点运算和图像灰度化处理
摘要:本文主要讲解图像点运算的灰度化处理,详细介绍常用的灰度化处理方法,并分享了图像颜色空间相互转换,以及三种灰度转换算法的实现. 本文分享自华为云社区<[Python从零到壹] 四十三.图像增 ...
- MATLAB:虹膜识别的图像灰度化处理,直方图均衡化
(1)图像灰度化处理: 读取一张图片之后,进行灰度化处理,然后对其进行直方图均值化. clear;close all %读取原图地址 RGB= imread('D:\img\1.jpg'); %图像灰 ...
- 图像灰度化的三种方法(matlab、C++、Python实现)
灰度化处理就是将一幅色彩图像转化为灰度图像的过程.彩色图像分为R,G,B三个分量,分别显示出红绿蓝等各种颜色,灰度化就是使彩色的R,G,B分量相等的过程.灰度值大的像素点比较亮(像素值最大为255,为 ...
- CUDA精进之路(三):图像处理——图像灰度化、灰度直方图统计
引言 在大部分的图像处理程序中,其中必不可少的一步就是对传入的彩图进行灰度处理,将三个通道的RGB图片转化为单通道的Gray图,而对于灰度图进行直方图统计同样是观察检测图像特征的常用方法.在OpenC ...
- 【python图像处理】图像灰度化处理、图像灰度线性变换、图像灰度非线性变换
一.图像灰度化处理 1.最大值灰度处理方法 2.平均灰度处理方法 3.加权平均灰度处理方法 二.图像灰度线性变换 1.图像灰度上移变换 2.图像对比度增强变换 3.图像对比度减弱变换 4.图像灰度反色 ...
- 图像灰度化的三种常见方法源码
图像灰度化是图像处理很基础的一部分,在这里给出图像灰度化的三种常见方法的M源码,以供大家参考~ 平均值法,最大值法,加权平均值法 function f=MyGrayProcessing(Img) [m ...
最新文章
- python经典100例答案pdf-Python3基础训练经典100题(带答案)下载
- Apache Kafka-AckMode最佳实践
- php信息采集开发,程序php信息采集程序代码
- R语言版本查询以及line 1 of `undefined.cases': bad value of `47.25' for attribute `A2'的解决
- QQuickRenderControl
- 月入10w+的offer,变成了整容、传销、网红届的韭菜
- 划分子网后的三级结构
- 不同类型特征变量之间相关性分析
- PHP里面最难的是那部分,那个PHP中号称最难的‘递归函数’
- golang 安装 guru vscode 安装失败
- 10、斐波那契数列,跳台阶问题(Python)
- ZK 数据传输四:BackingBean获取spring层类再获取数据(jsp页面或zul页面)
- 7.5日chinapub生日聚会
- 大数据 流式计算 apache storm 学习笔记 01 ---汪文君
- mysql如何批量添加数据_mysql如何大批量插入数据 mysql大批量插入数据4种方法
- 塔尔寺景点门票销售管理系统
- ICIP论文结构整理
- Windows 端口代理配置(Netsh)
- The remote end hung up unexpectedly The remote end hung up unexpectedly RPC failed;
- kindle使用入门
热门文章
- r语言和python-R VS Python:R语言是否真的过时了?
- python利器的使用-Python数据科学利器
- 零基础学编程学java还是python-零基础学编程,Java和Python你pick谁?
- python课程是学什么的-Python课程包括哪些内容?
- python官网如何调中文-django的settings中设置中文支持的实现
- python里面temp是啥-Python模块学习:tempfile 临时文件(夹)操作
- python小程序-整理了适合新手的20个Python练手小程序
- Java的ArrayList集合_JAVA之ArrayList集合
- redis中的ziplist
- LeetCode Count Primes