2017-09-12 1 views
0

Je souhaite découper une feuille de sprites PNG en sprites en utilisant pngjs v3.3.0 pour nodejs. Cela me donne un fond bruyant inattendu pour certains des sprites produits. Ensuite, je tryed script simple qui crée simplement PNG transparent vide puis écrit dans un fichier:Noise in PNG généré par pngjs pour nodejs

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

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

et vide PNG est créé avec un fond bruyant aussi. J'ai également essayé de ne pas utiliser la transparence (colorType: 2), puis j'ai obtenu du PNG blanc avec du bruit. Et chaque fois que j'utilise le script, le bruit diffère. This is how it looks like. Essayé synchronisation et approche asynchrone. Je lance un script simplement en cmd comme suit: node pngjs. Et pngjs installé juste avec npm: npm install pngjs. Donc j'ai besoin d'éviter ce bruit en arrière-plan.

Répondre

0

Les données doivent être initialisées. Cela peut être réalisé comme ceci (voir aussi 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

Merci pour la réponse. Mais comment préserver bg transparent dans ce cas? – kolyaseg

+0

Trouvé moi-même qui besoin d'utiliser dstBuffer.data [idx + 3] = 0; pour ça. Merci! – kolyaseg