HTML5组件Canvas实现图像灰度化(步骤+实例效果)

昨日黄昏以后

昨日黄昏以后

2016-02-19 11:20

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的HTML5组件Canvas实现图像灰度化(步骤+实例效果),手机电脑控们准备好了吗?一起看过来吧!

新建一个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="" /

从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
h2Hello World!/h2
img id="imageSource" src="hanjiaren.jpg" alt="" /

canvas id="myCanvas" Gray Filter/canvas
/body
/html

代码中的文件可以替换任意你想要看到的图片文件
HTML5, 原来如此神奇。程序在google浏览器中测试通过,
最后的忠告,千万不要在本地尝试运行上面的代码,google浏览器的安全检查会自动阻止从浏览器中读写非domain的文件
最好在tomcat或者任意个web container的server上发布以后从google浏览器查看效果即可。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
展开更多 50%)
分享

猜你喜欢

HTML5组件Canvas实现图像灰度化(步骤+实例效果)

Web开发
HTML5组件Canvas实现图像灰度化(步骤+实例效果)

HTML5 Canvas渐进填充与透明实现图像的Mask效果

Web开发
HTML5 Canvas渐进填充与透明实现图像的Mask效果

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

HTML5 canvas 基本语法

Web开发
HTML5 canvas 基本语法

HTML5 Canvas概述

Web开发
HTML5 Canvas概述

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

html5 Canvas绘制线条 closePath()实例代码

Web开发
html5 Canvas绘制线条 closePath()实例代码

html5 canvas-1.canvas介绍(hello canvas)

Web开发
html5 canvas-1.canvas介绍(hello canvas)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

win8的快速启动怎么关闭?

win8的快速启动怎么关闭?

如何修改WinPE的OEM信息方法

如何修改WinPE的OEM信息方法
下拉加载更多内容 ↓