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 相关文章推荐
购物车选中得到价格实现示例
Jan 26 Javascript
浅谈jquery.fn.extend与jquery.extend区别
Jul 13 Javascript
JS简单测试循环运行时间的方法
Sep 04 Javascript
BootStrap Datetimepicker 汉化的实现代码
Feb 10 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
Mar 07 Javascript
vue-cli实现多页面多路由的示例代码
Jan 30 Javascript
vue引用js文件的多种方式(推荐)
May 17 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
Jul 23 Javascript
js实现图片上传到服务器和回显
Jan 19 Javascript
使用PreloadJS加载图片资源的基础方法详解
Feb 03 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
Dec 01 Javascript
JS创建或填充任意长度数组的小技巧汇总
Oct 24 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生成RSS文件类实例
2014/12/05 PHP
PHP输出九九乘法表代码实例
2015/03/27 PHP
PHP+jQuery翻板抽奖功能实现
2015/10/19 PHP
PHP pear安装配置教程
2016/05/14 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
2020/04/06 PHP
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
webpack写jquery插件的环境配置
2017/12/21 jQuery
Vue中render函数的使用方法
2018/01/31 Javascript
如何安装控制器JavaScript生成插件详解
2018/10/21 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
详解JavaScript的变量
2019/04/04 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
python里将list中元素依次向前移动一位
2014/09/12 Python
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
研究生导师推荐信
2014/09/06 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
安全保证书怎么写
2015/02/28 职场文书
给朋友的赠语
2015/06/23 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
企业安全隐患排查治理制度
2015/08/05 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android
MySQL数据库 安全管理
2022/05/06 MySQL