nodejsピクセルレベル画像処理PNG

ピクセル画像処理の使用ノード

一例として、共通の画像を使用して、ここで階調処理:

画像ファイルバッファフローを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

  

 

おすすめ

転載: www.cnblogs.com/muamaker/p/12083790.html