HTML5 canvas标签-3 简单灰度化的实现

2023-11-11

在RGB模型里当R=G=B时候那么这个颜色就是一个灰度颜色

范围是从0-255的 有四种方式可以实现,当然每个方式实现的效果都是不一样的

原图:

1 加权平均方法 就是利用灰度公式 根据人眼对色彩敏感程度进行处理的一种方式

约等于f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j))

代码如下

        for (var i=0;i<canvas.width;i++){
            for (var j=0;j<canvas.height;j++){
                var currentPixel = 4*canvas.width*j + 4* i,
                    r = data.data[currentPixel],
                    g = data.data[currentPixel+1],
                    b = data.data[currentPixel+2],
                    gray = 0.3*r+0.59*g+0.11*b;
                data.data[currentPixel] = gray;
                data.data[currentPixel+1] = gray;
                data.data[currentPixel+2] = gray;
            }
        }
        ctx.putImageData(data,0,0);
效果:



第二种方式是平均值法则:

意思很简单就是求R,G,B三个值的平均值

代码:

        for (var i=0;i<canvas.width;i++){
            for (var j=0;j<canvas.height;j++){
                var currentPixel = 4*canvas.width*j + 4* i;
                var num = Math.floor((data.data[currentPixel]+data.data[currentPixel+1]+data.data[currentPixel+2])/3)
                data.data[currentPixel] = num;
                data.data[currentPixel+1] = num;
                data.data[currentPixel+2] = num;
            }
        }
        ctx.putImageData(data,0,0);

效果:

第三种是最大值法:

        for (var i=0;i<canvas.width;i++){
            for (var j=0;j<canvas.height;j++){
                var currentPixel = 4*canvas.width*j + 4* i;
                var num = Math.max(data.data[currentPixel],data.data[currentPixel+1],data.data[currentPixel+2])
                data.data[currentPixel] = num;
                data.data[currentPixel+1] = num;
                data.data[currentPixel+2] = num;
            }
        }
        ctx.putImageData(data,0,0);

效果:



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML5 canvas标签-3 简单灰度化的实现 的相关文章

  • 带滚动条的 HTML 画布

    我正在宽度不等的画布上绘制图表 每个画布可以有自己的滚动条吗 我尝试将所有画布放在一个 div 中并指定最大宽度 但它不起作用 是否有可能所有画布在页面上的可见宽度均为 500 像素 并且每个画布都有其滚动条来查看画布的整个宽度 谢谢 指定
  • 如何从SurfaceView绘制到Canvas?

    我正在尝试做简单的画家 问题是Android看起来有三个独立的Canvas并给我它来顺序绘制 我用以下方式制作了用户界面SurfaceView 把霍尔德从中拿走 Override protected void onCreate Bundle
  • 使用鼠标在 HTML5 Canvas 上绘图

    我想使用鼠标在 HTML Canvas 上绘图 例如 绘制签名 绘制名称 我将如何实施这个 这是一个工作示例
  • 在 Fabric.js 中进行裁剪的“toDataURL”函数中,Multiplier 属性无法正常工作

    我的原始尺寸canvas is 800X700 我在用clipTo要在画布的选定部分中工作 var rect new fabric Rect left 100 top 50 fill fff width 376 height 602 str
  • EaselJS Alpha 遮罩滤镜

    我对 Canvas 还很陌生 我一直在尝试将图像颠倒过来EaselJS Alpha 蒙版 http www createjs com demos easeljs alphamaskreveal示例 以便初始图像清晰 并且您可以paint是模
  • 无法在 Raphael 中缩放多条路径?

    我尝试使用当前的热门问题 使用 raphael 缩放多条路径 https stackoverflow com questions 3352698 scaling multiple paths with raphael 没有太多运气 我正在通
  • Python,Tkinter:如何获取可滚动画布上的坐标

    我有一个带有滚动条的 Tkinter 画布 还有一些项目 当我单击它们时 它应该返回坐标 使用Python 这对于窗口中最初可见的对象效果很好 但是 当我向下滚动并且画布上更下方的项目进入视图时 单击时我不会获得它们的画布坐标 而是获得窗口
  • 如何等待第一次画布重绘,直到 @font-face-font 加载?

    我有一个 HTML5 画布并用它编写文本context fillText 使用 font face font 使用 Firefox 3 6 显示页面我遇到问题 在画布的第一次绘制上 字体尚未下载 因此文本将以标准字体显示 我找到了一个 解决
  • 将 PictureStream 转换为 HTML5 画布

    我正在从 net Web 服务检索图片流的字节数组 JSON 字节数组响应如下所示 137 80 78 372 617 more 我正在尝试转换这个字节数组并将其绘制到 HTML 画布中 如下所示 var context document
  • 在overlayImage中应用滤镜的方法在哪里?

    我想在overlayImage中应用一个过滤器 唯一的方法是在渲染后在整个画布上应用过滤器 对此没有内置支持 但很容易 破解 var overlayImageUrl load overlay image first fabric Image
  • 身体动画不流畅

    下面代码中的 spaceShip 在开始按住任何箭头键时移动并不顺利 它移动一步 冻结一瞬间 然后 平稳 地移动 怎样才能让它从一开始就顺利运转 而不是 冻结 My code
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • 如何以 Rails 形式将图像从 上传到具有 Rails Active Storage 的 S3?

    正如标题中所述 我正在尝试使用 Rails 的 Active Storage 从嵌套在 Rails 表单中的元素将图像上传到我的 S3 存储桶 到目前为止我已经能够使用使用 Active Storage 上传图像 这User class h
  • canvas.getContext('2D') 返回空值

    我创建了一个画布并将其命名为getContext 方法 但它返回null为上下文 这是我使用的代码 我在控制台中得到了这个
  • Chrome 扩展屏幕截图部分图像裁剪适用于 Retina 显示屏

    我制作了一个 chrome 扩展 它捕获网站的单个元素 div 我使用 chrome tabs gt captureVisibleTab 来制作屏幕截图 然后 使用元素 div 的坐标 x y 和大小 宽度 高度 裁剪屏幕截图 这对我来说在
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 在屏幕上随机生成一个圆圈并将其设为绿色或红色

    所以我一直在尝试制作一个游戏应用程序 它可以在 Android 屏幕上随机显示带有文本的红色按钮或带有文本的绿色按钮 如果有人可以帮助我 我将不胜感激 另外 如果有人知道如何做到这一点 我想慢慢地产生更快的酷优势 谢谢 SuppressLi
  • 将事件绑定到画布上的形状

    如何将事件绑定到画布上绘制的形状 我以为这会起作用 但我收到错误
  • 在窗口调整大小和窗口加载时动态调整 pixi 舞台及其内容的大小

    我正在尝试在窗口调整大小时动态调整 pixi 舞台 画布和内容 的大小 并且最初以浏览器窗口的大小加载 而不改变比例 我使用以下内容将初始大小基本上设置为window innerWidth window innerHeight 但它做了一些
  • Javascript - HTML Canvas 上的 Gecko 边框半径自适应(CSS border-radius)

    我试图弄清楚如何将 border radius css 属性的行为重现到 HTML 画布中 所以我已经在 J avascript 中做了一些事情 以便使用特定的半径 对于每个角 来计算给定形状的正确边界 如果需要的话 这是上一个问题 Gec

随机推荐

  • feign使用注意

    参数使用注意 参数name value属性 这两个的作用是一样的 指定的是调用服务的微服务名称 参数url 指定调用服务的全路径 经常用于本地测试 如果同时指定name和url属性 则以url属性为准 name属性指定的值便当做客户端的名称
  • c#正确用smtp.office365.com发邮件

  • Python自动化测试Unittest框架基本使用

    Unittest 框架 首先要知道这个框架是Python自带的 不需要安装 这个框架最重要的4 个核心 TestCase TestSuite TextTestRunner Fixture TestCase 个人总结一下 这个就是用测试用例继
  • SpringCloud与SpringBoot的版本对应关系

    在SpringCloud官网 https spring io projects spring cloud 可以看到 当前 2021年11月 SpringCloud的最新GA版本是2020 0 4这一版 除了2020 0 X版本外 Sprin
  • 基于掌控板+二哈+TinyWebDB+Easy_IoT的人脸识别测温

    文章目录 前言 一 部分硬件及平台介绍 1 二哈识图 HuskyLens 2 TinyWebDB 3 Easy IoT 二 操作步骤 1 二哈的使用 2 TinyWebDB的使用 3 Easy IoT的使用 三 硬件连接 四 图形化代码编写
  • jdk8 免登录安装

    1 注册一大堆 麻烦死了 程序员怎么可能做被迫的事情 2 复制下载链接https www oracle com webapps redirect signon nexturl https download oracle com otn ja
  • 解析目标文件

    最近在看 程序员的自我修养 颇有体会 故化繁为简 整理书中部分内容 作为学习笔记 PC平台上流行的可执行文件格式主要是windows下的PE Portable Executable 和Linux下的ELF Executable Linkab
  • 基于MapReduce的手机上网流量统计分析

    Hadoop简介 适合大数据的分布式存储与计算平台 运行在Hadoop之上的大型服务器集群 数据情况 摘取部分 字段描述 时间戳 手机号码 AP mac AP mac 访问的网址 网址种类 上行数据包 下行数据包 流量 访问状态 手机上网流
  • 区块链项目数据存储系统分析

    前言 一 区块链简介 二 数据存储 1 比特币 Bitcoin 2 以太坊 3 Hyperledger Fabric 4 EOS Enterprise Operation System 4 1 IPFS 4 2 EOS存储的设计 5 The
  • 初识C语言(5)C语言一些基本常识

    需提前看 初识C语言 4 字符串和转义字符 目录 相关知识 匹对原则 写法习惯 被省略 详解 介绍 介绍 介绍 介绍 介绍 VS2013调试 进入调试 逐语句和逐过程 F5全速调试 F9断点 相关知识 匹对原则 学习C语言之前 我们需要先知
  • 软件研发部门的基础设施

    作者 朱金灿 来源 http blog csdn net clever101 有时我在想一个问题 软件研发部门的基础设施包括哪些东西 先说说硬件吧 最容易想到的开发人员用的电脑 还有开发部门局域网 源码服务器 构建服务器和备份服务器 再说说
  • Logstash.service: Unit not found (CentOS 7)

    1 生成logstash service sudo usr share logstash bin system install etc logstash startup options systemd
  • linux系统下web服务器的配置

    配置步骤及源码 绑定IP地址 为Apache服务器网卡绑定两个IP地址 分别是eth0 1 192 168 91 21和eth0 2 192 168 91 22 通过复制的方式复制ifcfg eth0为ifcfg eth0 1和ifcfg
  • 数据库(二)—— 关系数据库以及关系代数和关系运算

    一 关系数据结构及形式化定义 1 关系 关系模型的数据结构非常简单 只包含单一的数据结构 关系 在用户看来 关系模型中数据的逻辑结构是一张扁平的二维表 1 1 域 域是一组具有相同数据类型值的集合 1 2 笛卡儿积 笛卡儿积是域上的一种集合
  • Win10远程桌面连接怎么用?(远程桌面连接教程)

    怎么开启远程桌面连接 电脑远程桌面连接怎么用 要使用远程桌面控制电脑 您需先在电脑上开启远程桌面连接并且两台电脑还需在同一个局域网中 否则您的设置端口转发才能使用远程桌面连 那么怎么开启远程桌面连接呢 具体操作步骤如下 步骤1 在Win10
  • Redis7之Redis复制(八)

    8 1 介绍 主从复制 mmaster以写为主 slave以读为主 当master数据变化时 自动将新的数据异步同步到其他slave数据库 读写分离 down机恢复 数据备份 水平扩容支撑高并发 8 2 基本操作 配从不配主 权限细节 ma
  • Unity 场景类

    using System Collections using System Collections Generic using UnityEngine using UnityEngine SceneManagement public cla
  • Elasticsearch + Kibana+Logstash 8.x版本部署(linux)

    Elasticsearch专栏入口 入门教程在这里 Elasticsearch教程 教程对Elasticsearch 原生代码 以及 Python API 进行关联讲解 适合Elasticsearch 0基础想学习基础代码的选手 适合想使用
  • openwrt路由器变网桥设备交换机,还能当服务器部署NAS私有云

    一 优级网络部署 现在大的电信公司都送比较不错的光猫 甚至还有双频全兆口 如果这么好的设备放着 还用自己的路由器拨号 就有点浪费了 所以改为光猫拨号 路由器干什么 当延伸设备 当NAS 当服务器 当什么都可以 而且它的wifi可以桥接 也可
  • HTML5 canvas标签-3 简单灰度化的实现

    在RGB模型里当R G B时候那么这个颜色就是一个灰度颜色 范围是从0 255的 有四种方式可以实现 当然每个方式实现的效果都是不一样的 原图 1 加权平均方法 就是利用灰度公式 根据人眼对色彩敏感程度进行处理的一种方式 约等于f i j