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 相关文章推荐
js的逻辑运算符 ||
May 31 Javascript
原生javascript实现无间缝滚动示例
Jan 28 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
May 01 Javascript
Javascript获取表单名称(name)的方法
Apr 02 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
Aug 15 Javascript
JavaScript接口的实现三种方式(推荐)
Jun 14 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
Feb 13 Javascript
js实现4个方向滚动的球
Mar 06 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
Mar 09 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
Nov 14 Javascript
jquery实现的分页显示功能示例
Aug 23 jQuery
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
May 29 Javascript
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
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
PHP实现对图片的反色处理功能【测试可用】
2018/02/01 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
简约JS日历控件 实例代码
2013/07/12 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
JS delegate与live浅析
2013/12/21 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
详解vue.js的事件处理器v-on:click
2017/06/27 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
JS+HTML5 canvas绘制验证码示例
2018/12/05 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
2019/05/23 jQuery
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
python动态参数用法实例分析
2015/05/25 Python
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
python对日志进行处理的实例代码
2018/10/06 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
浅谈python的输入输出,注释,基本数据类型
2019/04/02 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
工作人员思想汇报
2014/01/09 职场文书
中标通知书
2015/04/17 职场文书
教师研修随笔感言
2015/11/18 职场文书
源码安装apache脚本部署过程详解
2022/09/23 Servers