这里使用常见的图片灰度处理为例子:
用到了 pngjs 的 npm 库,这个库可以将 png 的图片文件 Buffer 流,转换为 r g b a 为 255 的像素值, 同时也可以将 r g b a 的 255 像素值,转换为文件的 Buffer 流,然后写入文件。
例子:
const fs = require(‘fs‘),PNG = require(‘pngjs‘).PNG; // 根据参数获取文件名称 const pngFile=process.argv[2]; var outDir=pngFile.replace(".png",""); // 读取文件的r g b a 数据 function getImgData(p){ return new Promise((resolve,reject)=>{ fs.createReadStream(p) .pipe(new PNG({ filterType: 4 })) .on(‘parsed‘, function() { var data= new Buffer.alloc(4*this.width*this.height); this.data.copy(data); resolve({ data:data, width:this.width, height:this.height }); } ); }) } // 将数据保存到文件 function ImgDataToSave(imgData){ let {width,height,data} = imgData; var newPng=new PNG({ filterType: 4, width:width, height:height }); newPng.data = data; var dst = fs.createWriteStream(‘export/‘+outDir+‘.png‘); newPng.pack().pipe(dst); } // 获取图片后灰度处理 getImgData(pngFile).then((res)=>{ let {width,height,data} = res; for(let i = 0; i < height; i++){ for(let j = 0; j < width; j++){ var idx = (width * i + j) << 2; var avg = data[idx] + data[idx+1] + data[idx+2]; avg = parseInt(avg/3); data[idx] = avg; data[idx+1] = avg; data[idx+2] = avg; } } ImgDataToSave({ width, height, data }); }).catch((e)=>{ console.log("错误:",e); });
使用,执行
node ./index.js ./test.png
原文:https://www.cnblogs.com/muamaker/p/12083790.html