#gif #image #stream #image-encoding #cli

bin+lib gomander-engiffen

将图像序列编码为 GIF 图像。包括可安装的命令行二进制文件以及库。从 https://github.com/TooManyBees/engiffen 分支而来。

4 个版本

使用旧的 Rust 2015

0.9.1 2024 年 5 月 30 日
0.9.0 2024 年 5 月 12 日
0.8.3 2024 年 3 月 3 日
0.8.2 2024 年 3 月 1 日

#53多媒体

Download history 100/week @ 2024-05-07 25/week @ 2024-05-14 15/week @ 2024-05-21 130/week @ 2024-05-28 6/week @ 2024-06-04 11/week @ 2024-06-11

359 每月下载量

MIT 许可证

39KB
868 代码行

engiffen

从图像序列生成 GIF。

source bitmap engiffenned gif photoshopped gif

源帧、生成的 GIF 和 Photoshop 的 GIF

此仓库是 engiffen 的分支,由 TooManyBees 创建。
我创建此分支是因为原始仓库不再维护,并且我在尝试使用它时遇到了依赖性问题,特别是 color_quant。所有代码的功劳都归原作者 TooManyBees。

使用方法

作为二进制文件

# Read a bunch of bitmaps and write them to a 20-frame-per-second gif at path `hello.gif`
engiffen *.bmp -f 20 -o hello.gif

# Read a range of files
engiffen -r file01.bmp file20.bmp -o hello.gif
# The app sorts them in lexicographical order, so if your shell orders `file9`
# before `file10`, the resulting gif will not be in that order.

# Use a faster but worse quality algorithm
engiffen -r file01.bmp file20.bmp -o hello.gif -q naive

# Use the default NeuQuant algorithm, but with a reduced pixel sample rate
# Values over 1 reduces the amount of pixels the algorithm trains with
engiffen -r file01.bmp file100.bmp -o hello.gif -s 2

# Print to stdout by leaving out the -o argument
engiffen *.bmp > output.gif
# or hose your console by forgetting to redirect!
engiffen *.bmp

(如果你的 shell 无法将通配符模式展开为单个参数(例如,Windows 命令行),则二进制将解析通配符模式。你可以使用 --no-default-features 来跳过此功能。)

作为库

extern crate engiffen;

use engiffen::{load_images, engiffen, Gif, Quantizer};
use std::fs::File;

let paths = vec!["vector", "of", "file", "paths", "on", "disk"];
let images = load_images(&paths);
let mut output = File::create("output.gif")?;

// encode an animated gif at 10 frames per second
let gif = engiffen(&images, 10, Quantizer::Naive, None)?;
gif.write(&mut output);
// Optionally specify how many pixels of each frame should be sampled
// when computing the gif's palette. This value reduces the amount of
// sampling work to 1/9th of what it normally would, by only sampling
// every 3rd pixel on every 3rd row (i.e. pixels lying on a 3x3 grid).
let gif = engiffen(&images, 10, Quantizer::NeuQuant(3), None);

调试输出

要打印到 STDERR 的计时信息,请使用 debug-stderr 功能

$ cargo install engiffen --features debug-stderr

$ engiffen *.tif -f 15 -s 10 > out.gif
Checked image dimensions in 0 ms.
Pushed all frame pixels in 469 ms.
Computed palette in 67 ms.
Mapped pixels to palette in 3443 ms.
Wrote to stdout in 5415 ms

其他

测试实际创建 GIF 的示例帧被忽略。在运行忽略的规范时,请以发布模式运行,否则它们将花费很长时间。

cargo test --release -- --ignored

主要工作

  • 增量帧处理

    接受来自服务器的帧流,逐个处理它们。推迟对最终调色板和编译的 GIF 进行排序,直到完成。

贡献

PR 和问题总是受欢迎。

依赖项

~4MB
~67K SLoC