NodeJS 动画 gif 调整大小
NodeJS Animated gif resizing
我正在尝试使用 NodeJS 调整动画 gif 的大小。
我需要它在调整大小后保持动画效果。
我的应用目前正在使用 Sharp 调整其他图片的大小,但它似乎不支持导出动画 gif。
如果可能的话,我想找到一个不依赖于其他外部软件(如 *Magick)的 npm 包。
如果它也支持流就太棒了。
我不知道任何原生 npm 包,但你可以使用 gifsicle。
Gifsicle is a command-line tool for creating, editing, and getting information about GIF images and animations.
这是一篇关于使用 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!');
});
示例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'));
我正在尝试使用 NodeJS 调整动画 gif 的大小。 我需要它在调整大小后保持动画效果。
我的应用目前正在使用 Sharp 调整其他图片的大小,但它似乎不支持导出动画 gif。
如果可能的话,我想找到一个不依赖于其他外部软件(如 *Magick)的 npm 包。 如果它也支持流就太棒了。
我不知道任何原生 npm 包,但你可以使用 gifsicle。
Gifsicle is a command-line tool for creating, editing, and getting information about GIF images and animations.
这是一篇关于使用 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!');
});
示例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'));