Last active
March 14, 2025 06:31
-
-
Save brainlessbitch/b7f067a3ecb4eecb11966727f010f221 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::fs::File; | |
use image::{ | |
codecs::gif::{GifEncoder, Repeat}, | |
Delay, Frame, ImageBuffer, Rgba, | |
}; | |
const IMAGE_WIDTH: u32 = 88; | |
const IMAGE_HEIGHT: u32 = 31; | |
const IMAGE_FRAMES: &[&[u8]] = &[ | |
&[ | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, | |
0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, | |
0xFF, 0xE7, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, | |
0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, | |
0xE7, 0xFF, 0xFF, 0xFF, 0x07, 0xE6, 0x04, 0x06, 0xE6, 0x04, 0x7E, 0x60, 0x30, 0xE7, 0xFF, | |
0x07, 0xE4, 0x04, 0x04, 0xE4, 0x04, 0x3C, 0x20, 0x20, 0xE7, 0xFF, 0xE7, 0xE4, 0xE4, 0xE4, | |
0xE4, 0xE4, 0x3C, 0x27, 0x27, 0xE7, 0xFF, 0xE7, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0x3C, 0x27, | |
0x20, 0xE7, 0xFF, 0xE7, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0x3C, 0x27, 0x20, 0xE7, 0xFF, 0xE7, | |
0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0x3C, 0x27, 0x3F, 0xE2, 0xFF, 0x07, 0x04, 0xE4, 0x04, 0x04, | |
0xE4, 0x24, 0x20, 0x60, 0x30, 0xE0, 0x07, 0x0E, 0xE4, 0x04, 0x0E, 0xE4, 0x64, 0x60, 0xE0, | |
0x38, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
], | |
&[ | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, | |
0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, | |
0xFF, 0xE7, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, | |
0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, | |
0xE7, 0xFF, 0xFF, 0xFF, 0x07, 0xE6, 0x04, 0x06, 0xE6, 0x04, 0x7E, 0x60, 0x30, 0xE7, 0xFF, | |
0x07, 0xE4, 0x04, 0x04, 0xE4, 0x04, 0x3C, 0x20, 0x20, 0xE7, 0xFF, 0xE7, 0xE4, 0xE4, 0xE4, | |
0xE4, 0xE4, 0x3C, 0x27, 0x27, 0xE7, 0xFF, 0xE7, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0x3C, 0x27, | |
0x20, 0xE7, 0xFF, 0xE7, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0x3C, 0x27, 0x20, 0xE7, 0xFF, 0xE7, | |
0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0x3C, 0x27, 0x3F, 0xE2, 0xFF, 0x07, 0x04, 0xE4, 0x04, 0x04, | |
0xE4, 0x24, 0x20, 0x60, 0xF0, 0xFF, 0x07, 0x0E, 0xE4, 0x04, 0x0E, 0xE4, 0x64, 0x60, 0xE0, | |
0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
], | |
]; | |
fn main() { | |
let file = File::create("out.gif").unwrap(); | |
let mut encoder = GifEncoder::new(file); | |
encoder.set_repeat(Repeat::Infinite).unwrap(); | |
for frame in IMAGE_FRAMES { | |
let mut buffer: ImageBuffer<Rgba<u8>, Vec<u8>> = | |
ImageBuffer::new(IMAGE_WIDTH, IMAGE_HEIGHT); | |
for y in 0..IMAGE_HEIGHT { | |
for x in 0..IMAGE_WIDTH { | |
if x >= IMAGE_WIDTH || y >= IMAGE_HEIGHT { | |
return; | |
} | |
let byte_index = (y * IMAGE_WIDTH + x) / 8; | |
let byte = frame[byte_index as usize]; | |
if (byte >> (x % 8)) & 1 == 1 { | |
buffer.put_pixel(x, y, Rgba([0, 0, 0, 1])); | |
} else { | |
buffer.put_pixel(x, y, Rgba([255, 255, 255, 1])); | |
} | |
} | |
} | |
encoder | |
.encode_frame(Frame::from_parts( | |
buffer, | |
0, | |
0, | |
Delay::from_numer_denom_ms(250, 1), | |
)) | |
.unwrap(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment