JavaScript如何对图片进行黑白化

HTML5推出了<canvas>元素,使我们可以通过js动态的在 <canvas> 这个区域之中进行图像的绘制。而我们这次对图像的黑白化就是使用js操作<canvas>元素 来实现的。

先看一下效果图

左侧为 img标签 , 右侧为 canvas 元素标签,结构如下

<img src="1.jpg" style="width: 200px; height: 199px"/>
<canvas id="drawing" width="200" height="199" ></canvas>

JS的代码很简单, 只有20多行 ,不过本着授人与鱼不如授人于渔的态度,源码会贴到最下面,我们先说理论。

1、关于图片

大家应该都知道,所谓图片是由一个个的像素点组成的,也就是说一个 300*300大小的图片,共有300*300的像素点,而每一个像素点都是由三原色(red,green,blue)加透明度(alpha)来组成。所以说如果我们希望改变图像的图像数据,其实就是改变图像每一个像素点的数据。

2、关于API

我们通过 var drawing = document.getElementById('drawing'); 这个方法可以拿到 canvas对象,canvas对象提供了 2D、3D两种绘图方式,这里我们使用2D绘图
 使用 context2d = drawing.getContext('2d'); 方法获得context2d对象。拿到context2d对象之后,我们通过context2d提供的方法getImageData(),来获取图像数据,getImageData()有4个参数,分别表示画面区域的 x 和 y 坐标以及该区域的像素宽度和高度 var imagedata = context2d.getImageData(0, 0, image.width, image.height); 

ImageData 对象都有三个属性:width、height 和
data。其中 data 属性是一个数组,保存着图像中每一个像素的数据。并通过,red,green,blue,alpha来表示。那么我们如果想要改变图像的图像数据,就需要改变 imagedata的data属性数据,改变 red,green,blue,alpha 的值。

这里是源代码

function drawImageData () {
      var context2d = null;
      if(drawing.getContext) {
        context2d = drawing.getContext('2d');
      }
      if (context2d == null) {
        return;
      }
      var image = document.images[0];
      context2d.drawImage(image, 0 , 0);
      var imagedata = context2d.getImageData(0, 0, image.width, image.height);
      var data = imagedata.data;
      console.log('data: ' + data);
      var i,len,red,green,blue,alpha,average;
      for (i = 0 , len = data.length; i < len; i+=4) {
        red = data[i];
        green = data[i + 1];
        blue = data[i + 2];
        alpha = data[i + 3];
        average = Math.floor((red + green + blue) / 3);
        data[i] = average;
        data[i+1] = average;
        data[i+2] = average;
      }
      imagedata.data = data;
      context2d.putImageData(imagedata, 0, 0);
    }

总结

以上所述是小编给大家介绍JavaScript如何对图片进行黑白化,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • JavaScript如何对图片进行黑白化

    HTML5推出了<canvas>元素,使我们可以通过js动态的在 <canvas> 这个区域之中进行图像的绘制.而我们这次对图像的黑白化就是使用js操作<canvas>元素 来实现的. 先看一下效果图 左侧为 img标签 , 右侧为 canvas 元素标签,结构如下 <img src="1.jpg" style="width: 200px; height: 199px"/> <canvas id="dr

  • python PIL模块的基本使用

    PIL基本功能介绍 from PIL import Image from PIL import ImageEnhance img = Image.open(r'E:\img\f1.png') img.show() #图像二值化 img = img.convert('L') # 图像放大 img = img.resize((img.width * int(3), img.height * int(4)), Image.ANTIALIAS) # # 对比度增强 enh_con = ImageEnha

  • Python办公自动化处理的10大场景应用示例

    目录 引言 1.Python处理Excel数据 2.Python处理PDF文本 3.Python处理Email 4.Python处理数据库 5.Python处理批量文件 6.Python控制鼠标 7.Python控制键盘 8.Python压缩文件 9.Python爬取网络数据 10.Python处理图片图表 小结 引言 知乎上有个热门问题,Python 未来会成为大众办公常用编程工具吗? 在编程世界里,Python已经是名副其实的网红了.曾经一个学汉语言的研究生,问我怎么学Python,因为他们

  • Android 蓝牙连接 ESC/POS 热敏打印机打印实例(ESC/POS指令篇)

    上一篇 主要介绍了如何通过蓝牙连接到打印机.这一篇,我们就介绍如何向打印机发送打印指令,来打印字符和图片. 1. 构造输出流 首先要明确一点,就是蓝牙连接打印机这种场景下,手机是 Client 端,打印机是 Server 端. 在上一篇的最后,我们从 BluetoothSocket 得到了一个OutputStream.这里我们做一层包装,得到一个OutputStreamWriter 对象: OutputStreamWriter writer = new OutputStreamWriter(ou

  • Android Bitmap像素级操作详解

    一:什么是Bitmap像素级的操作 相信大家都知道一张jpg或png放大后会是一个个小格子,称为一个像素(px),而且一个小格子是一种颜色,也就是一张jpg或png图片就是很多颜色的合集,而这些合集信息都被封装到了Bitmap类中.你可以使用Bitmap获取任意像素点,并修改它,对与某像素点而言,颜色信息是其主要的部分.所以像素级操作就是对一个个点的颜色超过. 二:载入与像素读写 在Android SDK中,图像的像素读写能够通过getPixel与setPixel两个Bitmap的API实现.

  • Java 如何实现照片转化为回忆中的照片

    目录 前言 环境依赖 代码 执行结果 前言 本文提供将图片进行色彩处理的Java工具类,让图片变成回忆中的画面.主要将图片做黑白与褐色的处理,具体的效果往下看吧. 环境依赖 一些工具的依赖,最好加一下. <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>30.1.1-jre</version> &

  • Python基于pyopencv人脸识别并绘制GUI界面

    目录 项目介绍 采集人脸: 识别功能: 项目思路 项目模块 1.人脸采集 2.数据训练 3.人脸识别 4.GUI界面 项目代码 人脸采集 数据训练 人脸识别 合并GUI 项目总结 项目介绍 我们先来看看成果: 首先写了一个能够操作的GUI界面. 其中两个按钮对应相应的功能: 采集人脸: 识别功能: 我可是牺牲了色相五五五五...(电脑像素不是很好大家将就一下嘿嘿嘿) 项目思路 本项目是借助于python的一个cv2图像识别库,通过调取电脑的摄像头进行识别人脸并保存人脸图片的功能,然后在通过cv2

  • 用Python字符画出了一个谷爱凌

    目录 怎么实现的? 运行方法 原理分析 完整代码 之前经常在网上看到那种由一个个字符构成的视频,非常炫酷.一直不懂是怎么做的,这两天研究了一下,发现并不难. 先来看一个最终效果(如果模糊的话,点击下方链接看高清版): https://pan.baidu.com/s/1DvedXlDZ4dgHKLogdULogg 提取码:1234 怎么实现的? 简单来说,要将一个彩色的视频变成字符画出来的黑白视频,用下面几步就能搞定: 对原视频进行抽帧,对每一帧黑白化,并将像素点用对应的字符表示. 将表示出来的字

  • 一步步教你利用Canvas对图片进行处理

    前言 Canvas,中文译为"画布",HTML5中新增了<canvas>元素,可以结合JavaScript动态地在画布中绘制图形. 今天,我们不讲Canvas的图形绘制,而是讲如何对图片进行处理,话不多说了,来一起看看详细的介绍吧. 大概流程非常简单,主要分为以下三个步骤: Canvas图片处理 是的,就像把大象装进冰箱一样简单,哈哈. 一.主要API 整个流程中所用到的主要Canvas API有: 绘制图像: drawImage() 获取图像数据: getImageDat

  • 15个常用的javaScript正则表达式(收藏)

    1 用户名正则 //用户名正则,4到16位(字母,数字,下划线,减号) var uPattern = /^[a-zA-Z0-9_-]{4,16}$/; //输出 true console.log(uPattern.test("iFat3")); 2 密码强度正则 //密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符 var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%

随机推荐