2017-09-12 2 views
0

Ich möchte PNG-Spritesheet in Sprites unter Verwendung von pngjs v3.3.0 für nodejs zerlegen. Dies gibt mir einen unerwartet lauten Hintergrund für einige der produzierten Sprites. Dann habe ich einfaches Skript tryed, die nur leere transparente PNG erstellt und dann schreibt sie in eine Datei:Rauschen in PNG von pngjs für nodejs erzeugt

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

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

Und leer PNG ist auch mit lauten Hintergrund erstellt. Ich habe auch versucht, keine Transparenz zu verwenden (colorType: 2), dann habe ich weißes PNG mit Rauschen bekommen. Und jedes Mal, wenn ich das Skript verwende, unterscheidet sich das Geräusch. This is how it looks like. Versuchte Synchronisierung und asynchrone Annäherung.

Ich führe sccript einfach in cmd wie folgt: node pngjs. Und pngjs nur mit npm installiert: npm install pngjs. Also muss ich dieses Geräusch im Hintergrund vermeiden.

Antwort

0

Die Daten müssen initialisiert werden. Dies kann wie folgt erreicht werden (siehe auch 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

Danke für die Antwort. Aber wie transparent bg in diesem Fall zu bewahren? – kolyaseg

+0

Ich selbst fand, dass dstBuffer.data [idx + 3] = 0; dafür. Danke! – kolyaseg

Verwandte Themen