ピクセル画像処理の使用ノード
一例として、共通の画像を使用して、ここで階調処理:
画像ファイルバッファフローをPNG形式ことができるNPMライブラリのuses pngjsは、RGBA 255の画素値に変換するだけでなく、255個の画素値RGBAであることができ、バッファストリームファイルに変換し、ファイルに書き込まれます。
例:
。CONST FS =( 'FS')を必要とする、PNG =( 'pngjs')を必要とするPNG。 //根据参数获取文件名称 CONST pngFile = process.argv [2]。 VAR OUTDIR = pngFile.replace( "PNG。"、 ""); //读取文件的RGBA数据 機能getImgData(P){ 新たな約束((決意、リジェクト)=> {戻り fs.createReadStream(P) .pipe(新しいPNG({ のfilterType:4 })) .on( '解析されたが」、関数(){ VARデータ=新しいBuffer.alloc(4 * this.width * this.height); this.data.copy(データ); 解決({ データ:データ、 幅:this.width、 高さ:この。 })。 ); }) } //将数据保存到文件 関数ImgDataToSave(imgData){ {幅、高さ、データが} = imgDataましょう。 VAR newPng =新しいPNG({ のfilterType:4、 幅:幅、 高さ:高 })。 newPng.data =データ。 VAR DST = fs.createWriteStream( 'エクスポート/' + OUTDIR + 'PNG。'); newPng.pack()パイプ(DST)。 } //获取图片后灰度处理 getImgData(pngFile).then((RES)=> { = RES {幅、高さ、データせ}; (I = 0せため、I <高さ; I ++){ (LETためJ = 0であり、j <幅あり、j ++){ VAR IDX =(幅* I + J)<< 2。 VAR平均=データ[IDX] +データ[IDX + 1] +データ[IDX + 2]。 平均=のparseInt(平均/ 3)。 データ[IDX =平均。 データ[IDX + 1] =平均。 データ[IDX + 2] =平均。 } } ImgDataToSave({ 幅、 高さ、 データ })。 。})キャッチ((E)=> { にconsole.log( "错误:"、E); });
実行
ノード./index.js ./test.png