2017-03-14 2 views
0

Ich versuche, 5 spezifische JPG-Dateinamen in ein animiertes GIF zu pipen. Ich habe mehrere Bibliotheken durchgesehen und Gif-Encoder gefunden. Ich bin nicht sehr gut mit Streams. Ich kann nicht herausfinden, wie man das RGB-Ergebnis von der JPEG Decoder in die addFrame() - Methode des Encoders leitet.Pipe mehrere JPGs in ein animiertes GIF mit Knoten JS

function createAnimatedGif(jpgPaths, animatedGifPath) { 
    let encoder = new GifEncoder(1280, 720); 

    let writeStream = fs.createWriteStream(animatedGifPath); 
    encoder.pipe(writeStream); 
    encoder.writeHeader(); 

    jpgPaths.forEach(filePath => { 
     fs.createReadStream(filePath) 
      .pipe(new JPEGDecoder) 
      //.pipe(encoder); 
      //.pipe(pixels => encoder.addFrame(pixels)); 
    }); 

    encoder.finish(); 
} 

Antwort

1

Ist ein Lese-Streams ein Muss? Ich hatte einige Erfolge mit dem Modul 'get-pixels'.

var getPixels = require('get-pixels') 
var GifEncoder = require('gif-encoder'); 
var gif = new GifEncoder(1280, 720); 
var file = require('fs').createWriteStream('img.gif'); 
var pics = ['./pics/1.jpg', './pics/2.jpg', './pics/3.jpg']; 

gif.pipe(file); 
gif.setQuality(20); 
gif.setDelay(1000); 
gif.writeHeader(); 

var addToGif = function(images, counter = 0) { 
    getPixels(images[counter], function(err, pixels) { 
    gif.addFrame(pixels.data); 
    gif.read(); 
    if (counter === images.length - 1) { 
     gif.finish(); 
    } else { 
     addToGif(images, ++counter); 
    } 
    }) 
} 
addToGif(pics); 
+0

Es funktioniert ohne gif.read() ... können Sie den Zweck der gif.read() erklären? Ist es nötig? Vielen Dank. – wayofthefuture

+1

Es ist nicht sehr gut dokumentiert in der [gif-encoder Dokumentation] (https://github.com/twolfson/gif-encoder), aber wenn Sie die Dokumentation für das "Fehler" -Ereignis lesen, heißt es 'Emits a Error when interner Puffer ist überschritten. Dies passiert, wenn Sie nicht lesen (entweder über .on ('data') oder .read()) und wir können die vorbereiteten Daten nicht löschen. ' Also, obwohl nicht unbedingt erforderlich, bekam ich Fehler, wenn ich zu viele Bilder verwendete ohne es. – Skabbi

Verwandte Themen