JavaScript利用Canvas实现图片黑白化处理
本文介绍如何使用HTML5 Canvas元素和JavaScript将彩色图片转换为黑白效果。通过获取Canvas的2D上下文,利用getImageData方法提取图像像素数据,遍历并修改每个像素的RGB值使其相等,最后使用putImageData将处理后的数据重新绘制到画布上,实现图片的黑白化效果。
JavaScript利用Canvas实现图片黑白化处理
HTML5引入了<canvas>元素,允许开发者通过JavaScript动态地在指定区域内绘制图像。本次演示将利用JavaScript操作<canvas>元素来实现图像的黑白化处理。
首先展示处理后的效果。

页面左侧使用<img>标签显示原图,右侧使用<canvas>元素显示处理后的结果,具体HTML结构如下。
<img src="1.jpg" style="width: 200px; height: 199px"/>
<canvas id="drawing" width="200" height="199" ></canvas>
实现该功能的JavaScript代码仅20余行,虽然代码简洁,但为了帮助读者理解原理,这里先阐述核心逻辑,完整源码将在文末提供。
图片像素原理
1、关于图片基础
图像由像素点构成。例如一张300x300像素的图片,包含90000个像素点。每个像素点由红(red)、绿(green)、蓝(blue)三原色及透明度(alpha)通道数据组成。因此,修改图像数据本质上是修改每个像素点的颜色值。
2、相关API说明
Canvas API与数据获取
通过 var drawing = document.getElementById('drawing') 获取canvas DOM对象。Canvas支持2D和3D绘图模式,此处采用2D模式。使用 context2d = drawing.getContext('2d'); 方法获取2D绘图上下文对象。随后,利用该上下文提供的getImageData()方法提取图像数据,该方法接收四个参数,分别代表绘图区域的x坐标、y坐标、宽度及高度 var imagedata = context2d.getImageData(0, 0, image.width, image.height); 。
返回的ImageData对象包含width、height和data三个属性。其中data属性是一个数组,存储了所有像素的颜色数据,按顺序排列red、green、blue和alpha值。要改变图像外观,需修改ImageData对象的data数组中对应像素的RGB值。
以下是完整源代码。
function drawImageData () {
var context2d = null;
if(drawing.getContext) {
context2d = drawing.getContext('2d');
}
if (context2d == null) {
return;
}
var image = document.images[0];
context2d.drawImage(image, 0 , 0);
var imagedata = context2d.getImageData(0, 0, image.width, image.height);
var data = imagedata.data;
console.log('data: ' + data);
var i,len,red,green,blue,alpha,average;
for (i = 0 , len = data.length; i < len; i+=4) {
red = data[i];
green = data[i + 1];
blue = data[i + 2];
alpha = data[i + 3];
average = Math.floor((red + green + blue) / 3);
data[i] = average;
data[i+1] = average;
data[i+2] = average;
}
imagedata.data = data;
context2d.putImageData(imagedata, 0, 0);
}
总结
以上介绍了使用JavaScript和Canvas将图片转换为黑白效果的方法,希望能对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢对本站的支持!
JS监听滚动事件:回到顶部按钮的显示与隐藏逻辑
2026-11-05 16:19:37
JavaScript怎么读写LocalStorage与SessionStorage
2026-11-05 15:40:11
anime.js 与 GSAP 对比:轻量级项目该怎么选择动画库
2026-11-05 11:24:55
flv.js 与 hls.js 在直播场景下的选型对比
2026-11-05 08:18:52
JavaScript能做什么?前端开发中的作用与应用场景解析
2026-11-04 23:17:54
