Tinygif
A no_std GIF library for embedded applications(embedded-graphics)
Install / Use
/learn @andelf/TinygifREADME
tinygif
A tiny gif decoder written in no_std Rust.
This crate requires about 20kB of memory to decode a gif.
- [x] basic decoding
- [x] frame iterator
- [ ] interlace support
- [ ] fails on some highly compressed gifs: Change table size in DecodingDict
Usage
Instant and Timer are from Embassy framework, you can replace them with your own delay implementation.
let image = tinygif::Gif::<Rgb565>::from_slice(include_bytes!("../Ferris-240x240.gif")).unwrap();
loop {
for frame in image.frames() {
let start = Instant::now();
frame.draw(&mut display).unwrap();
let remain_delay = ((frame.delay_centis as u64) * 10).saturating_sub(start.elapsed().as_millis());
Timer::after_millis(remain_delay).await;
// Or, draw at given offset
// use embedded_graphics::prelude::DrawTargetExt;
// frame.draw(&mut display.translated(Point::new(30, 50))).unwrap();
}
}
License
MIT or Apache-2.0 at your option.
License of the gif files used in test
Animated Ferris in Action Happy as a Rustacean at Rust Fest Berlin 2016 (www.rustfest.eu)
- CC BY 4.0 Animated Ferris for Rust Fest Berlin by A. L. Palmer
- Resized by ezgif
Related Skills
node-connect
350.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
350.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
350.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
