2017-03-14 1 views
0

アニメーションGIFに5つの特定のJPGファイル名をパイプしてみようとしています。私はいくつかの図書館を見て、Gif-Encoderを見つけました。私はストリームではあまり良くありません。私はJPEG DecoderのRGB結果をエンコーダーのaddFrame()メソッドにパイプする方法を理解できないようです。ノードJSを使用して複数のJPGをアニメーションGIFにパイプ

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(); 
} 

答えて

1

読み取りストリームを使用する必要がありますか?私はモジュール '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

gif.read()なしで動作します... gif.read()の目的を説明できますか?それは必要ですか?ありがとう。 – wayofthefuture

+1

[gif-encoderのドキュメント](https://github.com/twolfson/gif-encoder)に詳しくは書かれていませんが、「エラー」イベントのドキュメントを読むと と表示されます。内部バッファが超過しています。これは、.on( 'data')または.read()経由で読み取らず、準備したデータをフラッシュできないときに発生します。 ' 厳密には必要ではありませんが、それなし。 – Skabbi

関連する問題