24 个版本

0.13.1 2024 年 1 月 23 日
0.12.0 2022 年 11 月 17 日
0.11.4 2022 年 6 月 27 日
0.11.3 2021 年 10 月 14 日
0.5.0 2015 年 6 月 5 日

#74图像

Download history 229021/week @ 2024-04-21 229733/week @ 2024-04-28 216139/week @ 2024-05-05 238019/week @ 2024-05-12 260520/week @ 2024-05-19 255996/week @ 2024-05-26 392886/week @ 2024-06-02 374859/week @ 2024-06-09 372978/week @ 2024-06-16 438573/week @ 2024-06-23 386911/week @ 2024-06-30 383098/week @ 2024-07-07 387581/week @ 2024-07-14 404817/week @ 2024-07-21 412396/week @ 2024-07-28 343631/week @ 2024-08-04

1,571,670 每月下载量
2,009 个 crate(70 个直接) 中使用

MIT/Apache

105KB
2K SLoC

GIF 编解码库 构建状态

用 Rust 编写的 GIF 编解码器 (API 文档)。

GIF 编解码库

此库提供了解码和编码 GIF 文件所需的所有函数。

高级接口

高级接口包括两个类型 EncoderDecoder

解码 GIF 文件

// Open the file
use std::fs::File;
let input = File::open("tests/samples/sample_1.gif").unwrap();
// Configure the decoder such that it will expand the image to RGBA.
let mut options = gif::DecodeOptions::new();
options.set_color_output(gif::ColorOutput::RGBA);
// Read the file header
let mut decoder = options.read_info(input).unwrap();
while let Some(frame) = decoder.read_next_frame().unwrap() {
    // Process every frame
}

编码 GIF 文件

编码器可用于保存简单的计算机生成图像

use gif::{Frame, Encoder, Repeat};
use std::fs::File;
use std::borrow::Cow;

let color_map = &[0xFF, 0xFF, 0xFF, 0, 0, 0];
let (width, height) = (6, 6);
let beacon_states = [[
    0, 0, 0, 0, 0, 0,
    0, 1, 1, 0, 0, 0,
    0, 1, 1, 0, 0, 0,
    0, 0, 0, 1, 1, 0,
    0, 0, 0, 1, 1, 0,
    0, 0, 0, 0, 0, 0,
], [
    0, 0, 0, 0, 0, 0,
    0, 1, 1, 0, 0, 0,
    0, 1, 0, 0, 0, 0,
    0, 0, 0, 0, 1, 0,
    0, 0, 0, 1, 1, 0,
    0, 0, 0, 0, 0, 0,
]];
let mut image = File::create("target/beacon.gif").unwrap();
let mut encoder = Encoder::new(&mut image, width, height, color_map).unwrap();
encoder.set_repeat(Repeat::Infinite).unwrap();
for state in &beacon_states {
    let mut frame = Frame::default();
    frame.width = width;
    frame.height = height;
    frame.buffer = Cow::Borrowed(&*state);
    encoder.write_frame(&frame).unwrap();
}

Frame::from_* 可用于将真彩色图像转换为最多 256 种颜色的调色板图像

use std::fs::File;

// Get pixel data from some source
let mut pixels: Vec<u8> = vec![0; 30_000];
// Create frame from data
let frame = gif::Frame::from_rgb(100, 100, &mut *pixels);
// Create encoder
let mut image = File::create("target/indexed_color.gif").unwrap();
let mut encoder = gif::Encoder::new(&mut image, frame.width, frame.height, &[]).unwrap();
// Write frame to file
encoder.write_frame(&frame).unwrap();

依赖关系

~130KB