JS实现彩色图片转换为黑白图片的3种方法

作者:流萤

时间:2026-10-31

浏览:379

本文介绍三种在JavaScript中将彩色图片转换为黑白图片的方法:利用Canvas API手动修改像素数据、使用CSS3的filter属性实现视觉灰度,以及借助Three.js或Pixi.js等第三方库处理。文章包含具体代码示例与原理说明,帮助开发者根据需求选择合适方案。

文章目录

1. 应用 Canvas 技术

在探索 canvas 特性时,观察到一种将彩色图像高效转换为灰度图像的技巧。以下提供实现该功能的精简代码范例:

<div style="display: flex">
  <img src="./panda.jpeg" />
  <button onclick="change()">转换</button>
  <canvas width="358" height="362"></canvas>
</div>

核心流程概括如下:

1. 将 img 元素绘制至 canvas 画布

2. 提取画布指定区域的图像数据,获取图像信息对象

该对象包含 data 类型化数组(涵盖红、绿、蓝、alpha 通道)及图像宽高信息

1. 应用 Canvas 技术

3. 将处理后的图像数据写回画布

<script>
  function change() {
    const img = document.querySelector("img");
    const cvs = document.querySelector("canvas");
    // 获取绘图表面提供 2D 渲染上下文
    const ctx = cvs.getContext("2d");
    // 把img元素画到canvas画布上
    ctx.drawImage(img, 0, 0);

    // 获取画布某个区域的图像信息(整个图片区域)
    const imageData = ctx.getImageData(0, 0, img.width, img.height);
    // imageData:图片信息对象
    for (let i = 0; i < imageData.data.length; i += 4) {
      // 将灰度值重新赋值给rgba
      const r = imageData.data[i];
      const g = imageData.data[i + 1];
      const b = imageData.data[i + 2];
      const avg = (r + g + b) / 3;
      imageData.data[i] =
      imageData.data[i + 1] =
      imageData.data[i + 2] =
      avg;
    }
    // 重新设置图像数据到画布
    ctx.putImageData(imageData, 0, 0);
  }
  </script>

最终呈现效果如下:

1. 应用 Canvas 技术

注意:需确保 canvas 的 width 和 height 属性与图片原始尺寸一致,否则可能导致转换后图像尺寸偏差。

1. 应用 Canvas 技术

灰度图像生成原理

1. 画布中的图像由若干像素点构成,每个像素点包含四个通道数据:红、绿、蓝、alpha。

1. 应用 Canvas 技术

2. 实现灰度化的关键在于,将每个像素点的红、绿、蓝数值取平均值,并赋值给该像素点。

1. 应用 Canvas 技术

2. 应用 CSS 滤镜

若仅需在页面展示灰度效果,无需通过 JavaScript 处理图像数据,可直接利用 CSS 的 filter 属性。代码示例如下:

<div>
  <img src="./panda.jpeg" />
  <button onclick="change()">点击</button>
</div>
<script>
  const change = () => {
    const img = document.querySelector('img');
    img.style.filter = 'grayscale(100%)'
  }
</script>

此方式不修改图片原始数据,仅改变其在网页中的渲染显示。

具体效果如下:

1. 应用 Canvas 技术

3. 借助第三方库

例如 Three.js 或 Pixi.js,这些库提供了内置的图像数据处理方法,涵盖灰度化功能。如需更精确的控制,建议查阅其官方文档。

至此,关于 JS 实现彩色图片转换为黑白图片的三种方法介绍完毕。如需了解更多 JS 彩色转黑白相关内容,可查阅本站往期文章或继续浏览后续文章,感谢大家的支持!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章