JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析


Posted in Javascript onJuly 31, 2018

本文实例讲述了JavaScript+Canvas实现彩色图片转换成黑白图片的方法。分享给大家供大家参考,具体如下:

1、convertToGray()

在主体代码中使用 canvas 元素的id来获取画布,并设置画布的宽和高为图片的宽和高,再将上下文初始化为2d画布;彩色图片加载完成后,使用 drawImage() 将图片加载到上下文,调用用于完成剩余绘制工作的 getColorData()putColorData();最后为myImage指定彩色图片的路径。

2、getColorData()

使用 getImageData()将图像复制到 myImage,然后按照以下方式处理图像:在图像数据数组中移动,并收集前三个字节(红色、绿色和蓝色,忽略 alpha)的值;然后,该图像将三个字节的值相加,并将总和除以3,计算结果将舍入为一个整数,并被写入到这三个字节的值中。此值对应于颜色的色调,但灰度值从0到255,得到外观与原始彩色图片相同的黑白图片。

3、putColorData()

putImageData() 将已更改的图像数据写回到画布,通常用于让另一个图片执行实际处理,并仅在处理完成时显示结果。

var canvas, ctx, myImage;
function convertToGray() {
  myImage = document.getElementById("img");
  canvas = document.getElementById("myCanvas");
  canvas.width = img.width;
  canvas.height = img.height;
  if (canvas.getContext) {
    ctx = canvas.getContext("2d");
    myImage.onload = function() {
      ctx.drawImage(myImage, 0, 0);
      getColorData();
      putColorData();
    }
    myImage.src = "images/img8.jpg";
  }
}
function getColorData() {
  var length = canvas.width * canvas.height;
  myImage = ctx.getImageData(0, 0, canvas.width, canvas.height);
  for (var i = 0; i < length * 4; i += 4) {
    var myRed = myImage.data[i];
    var myGreen = myImage.data[i + 1];
    var myBlue = myImage.data[i + 2];
    myGray = parseInt((myRed + myGreen + myBlue) / 3);
    myImage.data[i] = myGray;
    myImage.data[i + 1] = myGray;
    myImage.data[i + 2] = myGray;
  }
}
function putColorData() {
  ctx.putImageData(myImage, 0, 0);
}

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jMessageBox 基于jQuery的窗口插件
Dec 09 Javascript
网页打开自动最大化的js代码
Aug 22 Javascript
引用其它js时如何同时处理多个window.onload事件
Sep 02 Javascript
js的touch事件的实际引用
Oct 13 Javascript
详谈LABJS按需动态加载js文件
May 07 Javascript
checkbox批量选中,获取选中项的值的简单实例
Jun 28 Javascript
jQuery插件Validation快速完成表单验证的方式
Jul 28 Javascript
AngularJS实现DOM元素的显示与隐藏功能
Nov 22 Javascript
javascript中BOM基础知识总结
Feb 14 Javascript
详解redux异步操作实践
Aug 15 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
Jul 15 Javascript
vue实现倒计时功能
Mar 24 Vue.js
vue实现word,pdf文件的导出功能
Jul 31 #Javascript
在create-react-app中使用css modules的示例代码
Jul 31 #Javascript
详解使用create-react-app添加css modules、sasss和antd
Jul 31 #Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
Jul 31 #jQuery
Vue导出页面为PDF格式的实现思路
Jul 31 #Javascript
详解微信小程序实现WebSocket心跳重连
Jul 31 #Javascript
前端axios下载excel文件(二进制)的处理方法
Jul 31 #Javascript
You might like
怎样才能成为PHP高手?学会“懒惰”的编程
2006/12/05 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
修改发贴的编辑功能
2007/03/07 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
jQuery中empty()方法用法实例
2015/01/16 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
小程序实现tab标签页
2020/11/16 Javascript
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
Saltstack快速入门简单汇总
2016/03/01 Python
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
Django集成celery发送异步邮件实例
2019/12/17 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
使用HTML5 Canvas API控制字体的显示与渲染的方法
2016/03/24 HTML / CSS
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
阿巴庭院:Abba Patio
2019/06/18 全球购物
德国帽子专家:Hutshopping
2019/11/03 全球购物
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记