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 相关文章推荐
Jquery 学习笔记(一)
Oct 13 Javascript
JavaScript 嵌套函数指向this对象错误的解决方法
Mar 15 Javascript
基于Asp.net与Javascript控制的日期控件
May 22 Javascript
面向对象的Javascript之三(封装和信息隐藏)
Jan 27 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
Jan 24 Javascript
js控制容器隐藏出现防止样式变化的两种方法
Apr 25 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
Dec 29 Javascript
vue.js实现请求数据的方法示例
Feb 07 Javascript
无循环 JavaScript(map、reduce、filter和find)
Apr 08 Javascript
Vue实现一个返回顶部backToTop组件
Jul 25 Javascript
详解基于Vue的支持数据双向绑定的select组件
Sep 02 Javascript
javascript实现贪吃蛇游戏(娱乐版)
Aug 17 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
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
Js 中debug方式
2010/02/07 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python超简单解决约瑟夫环问题
2015/05/12 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
python多线程并发及测试框架案例
2019/10/15 Python
python、Matlab求定积分的实现
2019/11/20 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
Django 5种类型Session使用方法解析
2020/04/29 Python
python statsmodel的使用
2020/12/21 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
奶茶店创业计划书范文
2014/01/17 职场文书
经销商年会策划方案
2014/05/29 职场文书
2014年销售工作总结
2014/12/01 职场文书
小学中等生评语
2014/12/29 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
党性修养心得体会2016
2016/01/21 职场文书
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技
Python创建SQL数据库流程逐步讲解
2022/09/23 Python