#png #animation #encoder #frame #file #io #animated-png

apng

APNG 编码器。但体积很小。

10 个版本

0.3.4 2024年2月14日
0.3.3 2024年2月14日
0.3.1 2023年2月21日
0.3.0 2022年12月24日
0.1.3 2019年10月28日

#160 in 图像

Download history 46/week @ 2024-03-28 36/week @ 2024-04-04 14/week @ 2024-04-11 14/week @ 2024-04-18 16/week @ 2024-04-25 7/week @ 2024-05-02 10/week @ 2024-05-09 17/week @ 2024-05-16 16/week @ 2024-05-23 22/week @ 2024-05-30 23/week @ 2024-06-06 16/week @ 2024-06-13 12/week @ 2024-06-20 8/week @ 2024-06-27 21/week @ 2024-07-04 11/week @ 2024-07-11

每月54次下载
用于 4 crate

MIT 许可证

50KB
363 代码行

apng

apng at crates.io apng at docs.rs License apng at GitHub Actions

apng 是 Rust 的动画 PNG 编码器,完全用 Rust 编写。

示例用法

use apng::{Encoder, Frame, PNGImage};
use std::fs::File;
use std::io::BufWriter;
use std::path::Path;

fn main() {
    let files = vec![
        "rust_logo1.png",
        "rust_logo2.png",
        "rust_logo3.png",
        "rust_logo4.png",
        "rust_logo5.png",
        "rust_logo6.png",
    ];

    let mut png_images: Vec<PNGImage> = Vec::new();
    for f in files.iter() {
        png_images.push(apng::load_png(f).unwrap());
    }

    let path = Path::new(r"sample/out.png");
    let mut out = BufWriter::new(File::create(path).unwrap());

    let config = apng::create_config(&png_images, None).unwrap();
    let mut encoder = Encoder::new(&mut out, config).unwrap();
    let frame = Frame {
        delay_num: Some(1),
        delay_den: Some(2),
        ..Default::default()
    };

    match encoder.encode_all(png_images, Some(&frame)) {
        Ok(_n) => println!("success"),
        Err(err) => eprintln!("{}", err),
    }
}

自定义每帧速度

    let mut i = 1;
    for image in png_images.iter() {
        i += 1;
        let frame = Frame {
            delay_num: Some(1),
            delay_den: Some(i), // 2, 3, 4, 5, 6, 7
            ..Default::default()
        };
        encoder.write_frame(image, frame).unwrap();
    }

示例代码在此

许可证

MIT

另请参阅

参考

依赖项

~3MB
~63K SLoC