使用node对图片的像素进行处理

这里使用常见的图片灰度处理为例子:

这里用到一个 canvas 的库,本质上是调用的 c++ ,通过 c++ 调用显卡渲染。

可以做到和前端的 canvas 一样的api处理,但是效果更好。

npm i canvas

  

如果发现报错,以管理员权限打开 cmd

//先运行一下这个命令
npm install --global --production windows-build-tools
//安装的好像是一个python运行环境,中间有一个绿色的框框,结尾是python
//提示+ windows-build-tools@5.2.2
// updated 1 package in 107.732s说明安装成功 //然后运行命令 ,好像是全局安装这个包,英语小白,看不懂
npm install -g node-gyp //最后会提示一堆中文,===创建代码=== === 生成代码===复制啥的===说明安装成功 //然后把已经下载的node-modules文件删除,从新执行命令
npm install canvas //安装依赖就搞定了

  

一个简单的例子:图片灰度处理

const { createCanvas, loadImage } = require('canvas')
const fs = require("fs"); async function main(){
const myimg = await loadImage('./image/b.png');
const canvas = createCanvas(myimg.width, myimg.height)
const ctx = canvas.getContext('2d');
ctx.drawImage(myimg,0,0);
let imgData = ctx.getImageData(0,0,myimg.width, myimg.height);
let data = imgData.data;
for(let i = 0; i < data.length; i++){
var avg=(data[i]+data[i+1]+data[i+2])/3;
//var avg = data[i]* 0.3 + data[i+1]* 0.59 + data[i+2]* 0.11
data[i] = avg;
data[i+1] = avg;
data[i+2] = avg;
}
ctx.putImageData(imgData,0,0);
canvas.createPNGStream().pipe(fs.createWriteStream("./out.png")); } main();

  

详细的 API 操作,可以去看官方的文档,非常详情

nodejs 对 png 图片的像素级别处理的更多相关文章

  1. canvas学习笔记:canvas对图片的像素级处理--ImageData的应用

    学习了canvas的基本绘图功能后,惊喜的发现canvas对图片数据也有相当强大的处理功能,能够从像素级别操作位图,当然[lte ie8]不支持. 主要的函数有三个: ctx.createImageD ...

  2. 用Delphi直接获取bmp图片的像素

    用Delphi直接获取bmp图片的像素,并存储显示出.(此像素主要用在LED上显示).希望高手能给出代码啊!! function getImagePixels(f: string): Integer; ...

  3. iOS图片的伪裁剪(改变图片的像素值)

    0x00 原理 利用一张图片事先画好的图片(以下称为蒙板),盖在要被裁剪的的图片上,然后遍历蒙板上的像素点,修改被裁剪图片对应位置的像素的色值即可得到一些我们想要的不规则图片了(比如人脸) 0x01 ...

  4. win32加载图片获得像素值

    在写光栅渲染器时,需要加载图片获得像素以便进行纹理插值,试了几种方法发现下面这种比价简单,效率也可以接受 Texture2D是我自己定义的类,其中m_pixelBuffer是一个动态二维数组,每个元素 ...

  5. 精确选择识别png图片有像素的区域(使用方法)

    /** * * *---------------------------------------* * | ***精确选择识别png图片有像素的区域*** | * *----------------- ...

  6. 精确选择识别png图片有像素的区域

    /** * * *---------------------------------------* * | ***精确选择识别png图片有像素的区域*** | * *----------------- ...

  7. div里嵌套了img底部会有白块问题和图片一像素问题解决

    div里嵌套了img底部会有白块 因为img默认是按基线(baseline)对齐的.对比一下图片和右边的p, q, y等字母,你会发现这三个字母的“小尾巴”和图片下方的空白一样高.下面这张图中的黑线就 ...

  8. 验证码识别之w3cschool字符图片验证码(easy级别)

    起因: 最近在练习解析验证码,看到了这个网站的验证码比较简单,于是就拿来解析一下攒攒经验值,并无任何冒犯之意... 验证码所在网页: https://www.w3cschool.cn/checkmph ...

  9. iOS关于图片点到像素转换之杂谈

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 不管是以什么方法生成的图片,是从磁盘上读取的,还是从其他对象中 ...

随机推荐

  1. RK3288 修改ddr频率

    转载请注明出处:https://www.cnblogs.com/lialong1st/p/10912334.html CPU:RK3288 系统:Android 5.1 RK3288 的 ddr 频率 ...

  2. Mac地址转换成long长整型

    Mac地址转换成long长整型 using System;using System.Collections.Generic;using System.IO;using System.Text;usin ...

  3. centos7 windows7 双系统重新构建引导和启动顺序

    安装centos后无法引导启动windows7的解决方法 在电脑Windows7系统上安装Centos7,安装后找不到Windows7引导菜单. 原因:因为CentOS 7已采用新式的grub2系统, ...

  4. ISO/IEC 9899:2011 条款6.4.7——头文件名

    6.4.7 头文件名 语法 1.header-name: <  h-char-sequence  >         "  q-char-sequence  " h-c ...

  5. It’s worth noting值得注意的是

    It’s worth noting that in JavaScript applications the Model is often connected via Ajax to a back-en ...

  6. Qt使用boost库

    1.在官网下载boost库 boost_1_70_0.zip 2.将你的Qt的工具目录(有gcc.exe)设置环境变量.(比如F:\Qt592\Tools\mingw530_32\bin) 3.在命令 ...

  7. Linux -- Proactor(及其与Reactor的比较)

    高并发服务器常由多线程+IO复用服务器(one event loop per thread) 两种I/O多路复用模式:Reactor和Proactor 一般地,I/O多路复用机制都依赖于一个事件多路分 ...

  8. 【Leetcode_easy】707. Design Linked List

    problem 707. Design Linked List 参考 1. Leetcode_easy_707. Design Linked List; 完

  9. 35个高级Python知识点总结

    原文地址:https://blog.51cto.com/xvjunjie/2156525 No.1 一切皆对象 众所周知,Java中强调“一切皆对象”,但是Python中的面向对象比Java更加彻底, ...

  10. 阿里云ECS服务器活动99元一年(2019年 Hi拼团,拼着买,更划算)

    2019年10月22日更新,阿里云推荐有礼活动:ECS突发性能T6-低至99元/年赶紧上车~ 低价高性能,拼着买更划算 点我参加活动>> 购买前领取阿里云幸运券,更有可能享受折上折的优惠. ...