2017-09-12 9 views
0

nodejsにpngjs v3.3.0を使用して、PNGスプライトシートをスプライトにスライスしたいとします。これにより、生成されたスプライトの中には予期せぬノイズの多い背景があります。その後、私はちょうど空の透明PNGを作成し、ファイルに書き込みます簡単なスクリプトをしようと試み:ノードjのpngjによって生成されたPNGのノイズ

var fs   = require('fs'); 
var PNG   = require('pngjs').PNG; 
var dstBuffer = new PNG({ width:50, height:50 }); 

dstBuffer.pack().pipe(fs.createWriteStream("empty.png")); 

と空のPNGは、同様にノイズの多いバックグラウンドで作成されます。私も透明度(colorType:2)を使用しないようにしました。そして、それにノイズのある白いPNGがありました。スクリプトを使用するたびに、ノイズが異なります。 This is how it looks like。試した同期と非同期のアプローチ。

私はcmdで単に次のようにsccriptを実行します:node pngjs。そしてnpm:npm install pngjsと一緒にインストールされたpngjs。だから私はバックグラウンドでこのノイズを避ける必要があります。

答えて

0

データを初期化する必要があります。これは次のように達成することができます(https://github.com/lukeapage/pngjs/blob/master/examples/newfile.jsも参照してください)。

var fs   = require('fs'); 
var PNG   = require('pngjs').PNG; 
var dstBuffer = new PNG({ width:50, height:50 }); 

for (var y = 0; y < dstBuffer.height; y++) { 
    for (var x = 0; x < dstBuffer.width; x++) { 
     var idx = (dstBuffer.width * y + x) << 2; 

     dstBuffer.data[idx] = 255; 
     dstBuffer.data[idx + 1] = 255; 
     dstBuffer.data[idx + 2] = 255; 

     dstBuffer.data[idx + 3] = 255; 
    } 
} 

dstBuffer.pack().pipe(fs.createWriteStream("empty.png")); 
+0

お返事ありがとうございます。しかし、この場合透明なbgを保存するにはどうすればいいですか? – kolyaseg

+0

dstBuffer.data [idx + 3] = 0を使用する必要がある自分自身が見つかりました。それのために。ありがとうございます! – kolyaseg

関連する問題