このコードを使用して Node.js を呼び出しgm
、アニメーション GIF にテキストをオーバーレイします。
var gm = require('gm');
gm(infile)
.stroke("#000000")
.fill('#ffffff')
.font("./impact.ttf", 42)
.dither(false)
.drawText(0, 0, text, 'South')
.write(outfile, function (err) {
if (!err) {
console.log('Image processing done.');
}
else console.log(err);
});
正常に動作しますが、少し遅いです。私はもっとうまくやれると思います(少なくとも私は望んでいます)。
さて、それは本当に次のように翻訳されます(私はスパイしましたgm
):
$ convert /tmp/input.gif -stroke "#000000" -fill "#ffffff" \
-pointsize 42 -font ./impact.ttf \
-draw "gravity south text 0,0 SOME TEXT" \
-dither None output.gif
この処理には約 30 秒かかります。
私はいくつかのことを試しました:
- 追加
-colors 128
すると約 7 秒短縮されます (ただし、元の .gif が 256 色の場合、品質がいくらか失われます)。 -coalesce
30 秒にさらに 20 秒追加します。
テキストはすべてのフレームにオーバーレイされます。これが最終製品です (私がテストしている .gif ではなく、単なるサンプルです):
質問1
より多くのコンピューティングを投入する以外に、これを高速化するためにできることはありますか? 私は画質を下げることにオープンです..しかし、あなたが知っている..賢明に。
質問2
フロントエンドで進行状況インジケーターを取得するにはどうすればよいですか? 残りのデータ/時間のおおよそのアイデアを持つイベントをリッスンできますか? 例は素晴らしいでしょう。
入力GIFの下部にある数ピクセルを変更するだけなので、入力GIFと結果のGIFのライブファイルサイズは、残り時間のかなり良い指標ですが、より良いアプローチがあるかどうか疑問に思っています.
編集:
これは私がテストしているGIFです:
https://m.popkey.co/bca7ab/ygQJw.gif
$ identify -version
Version: ImageMagick 6.8.9-9 Q16 i686 2016-06-01 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules OpenMP
Delegates: bzlib cairo djvu fftw fontconfig freetype jbig jng jpeg lcms
lqr ltdl lzma openexr pangocairo png rsvg tiff wmf x xml zlib