https://github.com/poccariswet/apng
animated png encoder 🦀
https://github.com/poccariswet/apng
animated-png apng apng-encoder rust rust-lang
Last synced: 8 months ago
JSON representation
animated png encoder 🦀
- Host: GitHub
- URL: https://github.com/poccariswet/apng
- Owner: poccariswet
- License: mit
- Created: 2019-09-27T15:39:50.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-02-14T14:45:26.000Z (over 2 years ago)
- Last Synced: 2024-05-02T00:58:53.032Z (about 2 years ago)
- Topics: animated-png, apng, apng-encoder, rust, rust-lang
- Language: Rust
- Homepage:
- Size: 110 KB
- Stars: 29
- Watchers: 4
- Forks: 11
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# apng
[](https://crates.io/crates/apng)
[](https://docs.rs/apng)
[](https://raw.githubusercontent.com/poccariswet/apng/master/LICENSE?token=AF4FJMPRTUTCG2DAVLVTRVS5U7UJI)

apng is animated png encoder for Rust, and made in pure Rust.

## Example usage
```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 = 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),
}
}
```
### Customize each frame speed

```rust
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();
}
```
Sample code is [here](https://github.com/poccariswet/apng/tree/master/examples/each_frame_speed).
## License
[MIT](https://github.com/poccariswet/apng/blob/master/LICENSE)
## See also
- [Medium article about apng](https://medium.com/@poccariswet/how-i-developed-apng-library-for-rust-98d366f1195b)
## Reference
- [https://developer.mozilla.org/ja/docs/Animated_PNG_graphics](https://web.archive.org/web/20210420033916/https://developer.mozilla.org/ja/docs/Animated_PNG_graphics) ([English](https://web.archive.org/web/20210506203924/https://developer.mozilla.org/en-US/docs/Mozilla/Tech/APNG))
- [https://www.w3.org/TR/PNG/](https://www.w3.org/TR/PNG/)