NodeJS动画gif大小调整

Kir*_*chi 1 animated-gif image-resizing node.js

我正在尝试使用NodeJS调整动画gif的大小。我需要它来保持动画大小。

我的应用程序当前正在使用Sharp调整其他图像的大小,但它似乎不支持导出动画gif。

如果可能的话,我想找到一个不依赖其他外部软件(例如* Magick)的npm软件包。如果它也支持流,那就太棒了。

Ras*_*ori 5

我不知道任何本地npm软件包,但是您可以使用gifsicle

Gifsicle是用于创建,编辑和获取有关GIF图像和动画的信息的命令行工具。

这是一篇有关使用gifsicle调整动画gif大小的好文章:https : //davidwalsh.name/resize-animated-gif

示例1:我使用gifsicle模块安装了gifsicle的二进制文件:

const { execFile } = require('child_process');
const gifsicle = require('gifsicle');

console.time('execute time');

// You can use these options for resizing:
// --scale 0.5
// --resize-fit-width 300
// --resize-fit-height 200
// --resize 300x200
execFile(gifsicle, ['--resize-fit-width', '300', '-o', 'output.gif', 'input.gif'], err => {
  console.timeEnd('execute time');

  if (err) {
    throw err;
  }

  console.log('image resized!');
});
Run Code Online (Sandbox Code Playgroud)

示例2:使用该spawn方法获取可读流:

const fs = require('fs');
const { spawn } = require('child_process');
const gifsicle = require('gifsicle');

console.time('execute time');

const stream = spawn(gifsicle, ['--resize-fit-width', '300', 'input.gif']);

stream.on('close', () => {
  console.timeEnd('execute time');

  console.log('image resized!');
});

stream.stdout.pipe(fs.createWriteStream('output.gif'));
Run Code Online (Sandbox Code Playgroud)