diff options
author | Valentin Popov <valentin@popov.link> | 2024-01-08 00:21:28 +0300 |
---|---|---|
committer | Valentin Popov <valentin@popov.link> | 2024-01-08 00:21:28 +0300 |
commit | 1b6a04ca5504955c571d1c97504fb45ea0befee4 (patch) | |
tree | 7579f518b23313e8a9748a88ab6173d5e030b227 /vendor/gif/README.md | |
parent | 5ecd8cf2cba827454317368b68571df0d13d7842 (diff) | |
download | fparkan-1b6a04ca5504955c571d1c97504fb45ea0befee4.tar.xz fparkan-1b6a04ca5504955c571d1c97504fb45ea0befee4.zip |
Initial vendor packages
Signed-off-by: Valentin Popov <valentin@popov.link>
Diffstat (limited to 'vendor/gif/README.md')
-rw-r--r-- | vendor/gif/README.md | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/vendor/gif/README.md b/vendor/gif/README.md new file mode 100644 index 0000000..3202b8d --- /dev/null +++ b/vendor/gif/README.md @@ -0,0 +1,83 @@ +# GIF en- and decoding library [![Build Status](https://github.com/image-rs/image-gif/workflows/Rust%20CI/badge.svg)](https://github.com/image-rs/image-gif/actions) + +GIF en- and decoder written in Rust ([API Documentation](https://docs.rs/gif/)). + +# GIF encoding and decoding library + +This library provides all functions necessary to de- and encode GIF files. + +## High level interface + +The high level interface consists of the two types +[`Encoder`](https://docs.rs/gif/*/gif/struct.Encoder.html) and [`Decoder`](https://docs.rs/gif/*/gif/struct.Decoder.html). + +### Decoding GIF files + +```rust +// 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 +} +``` + +### Encoding GIF files + +The encoder can be used to save simple computer generated images: + +```rust +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_*`](https://docs.rs/gif/*/gif/struct.Frame.html) can be used to convert a true color image to a paletted +image with a maximum of 256 colors: + +```rust +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(); +``` |