JS实现彩色图片转换为黑白图片

news2024/11/16 19:56:47

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),图片的宽高等数据

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>

实现的效果如下:

注意:需要将 canvas 的 width 和 height 设置成图片的真实大小,否则可能出现转换后图片尺寸不一致。

黑白图片的原理

1. 画布中的一个图像是由多个像素点组成,每个像素点有四个数据:红、绿、蓝、alpha。

2. 将图像变成黑白,只需要将图像的每一个像素点设置成当前红、绿、蓝值的平均数即可。

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>

这种方法不会改变图片的原始数据,只是改变了其在页面上的显示方式。

效果如下:

3. 使用第三方库

比如 Three.js 或 Pixi.js,这些库提供了自己的方法来处理图像数据,包括灰度化。如果需要更加精准的转换操作,可以参考其官方文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1713862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[C++]debug介绍+debug时如何查看指针指向内存处的值

一、简介 预备工具和知识&#xff1a;使用使用VSCode使用Debug。 本文简介&#xff1a;本文将简要介绍debug中Continue&#xff0c;Step Over&#xff0c;Step Into和Restart的功能。并介绍如何在debug时查看动态内存地址&#xff08;指针&#xff09;的值&#xff1b; 二、D…

强国机械制造有限公司开展中国制造2050系列高端论坛

为深入探讨中国制造2050战略的实施路径和未来发展方向,强国机械制造有限公司2023年10月13日举办了一系列高端论坛。这些论坛吸引了众多业内专家、学者和企业代表参加,共同交流前沿观点和经验,以推动中国制造业的创新与发展。 本次系列高端论坛涵盖了多个关键主题,以下是各论坛…

《Ai企业知识库》rasa-rasa Core核心-认知理解以及配置文件应用

阿丹&#xff1a; 其实在整个rasa中的关键元素和关键的核心在前面多多少少也涉及到了很多&#xff0c;这里就是开始涉及到了rasa的训练核心core。 Rasa Core: Rasa Core 是Rasa框架中的一个组件&#xff0c;它负责处理对话管理部分&#xff0c;即决定对话流程中机器人的下一步…

大模型预训练结果到底是什么?

近日参加一个线下 AI 交流会议&#xff0c;会上有个非本行业的老师提问&#xff1a;“大家说的训练好的大模型到底是什么&#xff1f;是像 Word 软件一样可以直接使用的程序吗&#xff1f;” 这个问题看似简单&#xff0c;却一下把我问住了。的确&#xff0c;我们这些身处 AI 领…

如何培养元技能?

如何培养元技能&#xff1f; 一、引言 在当今社会&#xff0c;仅仅依靠某一专业技能是远远不够的。我们需要拓宽自己的能力和视野&#xff0c;从而更好地应对日新月异的社会发展和工作需求。在这个过程中&#xff0c;培养元技能变得至关重要。元技能不仅有助于我们在各个领域中…

智能变革:领域大模型重塑企业知识管理!

在如今知识密集型的行业领域里&#xff0c;企业员工每天都要与海量的文档和信息打交道&#xff0c;工作邮箱里充斥着无数邮件&#xff0c;办公桌上堆满了各种报告和文档&#xff0c;而每一个文件里都可能藏有关键信息。 然而&#xff0c;要从这些杂乱无章的信息海洋中找到需要…

JavaDS-学习数据结构之如果从零开始手搓顺序表,顺带学习自定义异常怎么用!

前言 笔者开始学习数据结构了,虽然笔者已经会用了,不管是C 中的stl亦或是Java 中的集合,为了算法比赛多少都突击过,但只知其然而不知其所以然,还是会限制发展的,因此,笔者写下这篇博客.内容是手搓一个顺序表.顺带加一点异常的使用,大伙看个乐子就好了.有错误直接私信喷我就好了…

wxPython Demo大全系列:ActivityIndicator控件分析

一、ActivityIndicator介绍 wx.ActivityIndicator 控件是 wxPython 中用于显示活动指示器的控件&#xff0c;通常用于指示程序正在执行某些后台任务或操作。它在用户界面中以动画的形式表现出活动状态&#xff0c;让用户知道应用程序正在进行处理而不是被挂起。 主要特点 可视…

Data Lakehouse:你的下一个数据仓库

作者&#xff1a;张友东 StarRocks TSC member/镜舟科技 CTO 数据分析是现代企业和组织决策过程中不可或缺的一部分&#xff0c;数据分析技术经过数十年的发展&#xff0c;需求场景从 BI 报表到数据探寻、实时预测、用户画像等不断丰富&#xff0c;技术架构经历从数据仓库、数据…

三方语言中调用, Go Energy GUI编译的dll动态链接库CEF

如何在其它编程语言中调用energy编译的dll动态链接库&#xff0c;以使用CEF 或 LCL库 Energy是Go语言基于LCL CEF开发的跨平台GUI框架, 具有很容易使用CEF 和 LCL控件库 interface 便利 示例链接 正文 为方便起见使用 python 调用 go energy 编译的dll 准备 系统&#x…

过去的六年,教会了我很多事

目录 过去六年的风风雨雨android缘起爱情缘灭顿悟收拾心情&#xff0c;再次启航面试阿里大起大落 如今时光&#xff0c;刺激且美好未来展望 过去六年的风风雨雨 android缘起 2018年&#xff0c;我从北京联合大学毕业&#xff0c;跟随着学长一起创业&#xff0c;从此开始了我的…

基于异构图的大规模微服务系统性能问题诊断

简介&#xff1a;本文介绍由南开大学、清华大学、腾讯、国家超级计算天津中心共同合作的论文&#xff1a;基于异构图的大规模微服务系统性能问题诊断。该论文已被IEEE Transactions on Services Computing期刊录用 论文标题&#xff1a;Diagnosing Performance Issues for Lar…

【计算机毕业设计】388微信小程序足球赛事及队伍管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

解密网络流量监控:优化IT运维的利器

引言&#xff1a; 在当今数字化时代&#xff0c;网络流量监控是维护网络稳定与业务连续性的关键。作为一名资深网络工程师&#xff0c;我将分享一些关于网络流量监控的重要知识&#xff0c;并探讨如何在IT运维中运用这一工具优化网络性能&#xff0c;确保业务的顺畅进行。 1. 网…

微前端(无界)入门

主应用通过props给子应用传值 父子应用通过eventBus通信 通过路由同步实现记录子应用的路由状态 主应用 main.ts: import ./assets/main.cssimport { createApp } from vue import { createPinia } from pinia import WujieVue from wujie-vue3import App from ./App.vue impo…

dust3r部署踩坑全记录

目前dust3r是三维重建最新最好的技术&#xff0c;运用了ViT编码器、Transformer、注意力机制、回归等技术&#xff0c;无需相机参数标定。 但是我部署过程中有很多坑&#xff0c;记录一下。 1.OSError: CUDA_HOME environment variable is not set. Please set it to your CU…

sprongboot+vue 游泳馆管理系统

游泳馆管理系统 spring bootvue 主要有游泳课程预约、网上购票、教练预约、游泳器材管理、会员管理等功能&#xff1b; 1、管理员 登录、修改密码 购票管理&#xff1a;查看订单、删除订单、修改订单 教练管理&#xff1a;教练信息查询、修改 课程信息&#xff1a;增删改查课程…

【class19】人工智能初步---语音识别(5)

【class19】 上节课&#xff0c;我们学习了&#xff1a;语音识别模型的结构和原理&#xff0c;同时调用创建好的AipSpeech客户端实现了语音转文字功能。 本节课&#xff0c;我们将初识字幕&#xff0c;学习这些知识点&#xff1a;1. srt字幕 2. 获取时间数据 …

认识NoSql

SQL是结构化的&#xff0c;NoSql是非结构化的 SQL是关联的&#xff1a; Nosql是无关联的&#xff1a; SQL采用的是SQL查询&#xff1a; 语法固定&#xff0c;好处是&#xff1a;只要是关系型数据库&#xff08;Mysql,Oracle&#xff09;&#xff0c;都能够使用相同的语句进行查…

Re73 读论文:ULMFiT Universal Language Model Fine-tuning for Text Classification

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名&#xff1a;Universal Language Model Fine-tuning for Text Classification 模型简称&#xff1a;ULMFiT 模型全名&#xff1a;Universal Language Model Fine-tuning ArXiv网址&#xff1a;https…