Initial vendor packages
Signed-off-by: Valentin Popov <valentin@popov.link>
This commit is contained in:
41
vendor/gif/examples/check.rs
vendored
Normal file
41
vendor/gif/examples/check.rs
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
use std::{env, fs, process};
|
||||
|
||||
fn main() {
|
||||
let file = env::args().nth(1)
|
||||
.unwrap_or_else(|| explain_usage());
|
||||
let file = fs::File::open(&file)
|
||||
.expect("failed to open input file");
|
||||
let mut reader = {
|
||||
let mut options = gif::DecodeOptions::new();
|
||||
options.allow_unknown_blocks(true);
|
||||
options.read_info(file).unwrap()
|
||||
};
|
||||
|
||||
loop {
|
||||
let frame = match reader.read_next_frame() {
|
||||
Ok(Some(frame)) => frame,
|
||||
Ok(None) => break,
|
||||
Err(error) => {
|
||||
println!("Error: {:?}", error);
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
println!(
|
||||
" Frame:\n \
|
||||
delay: {:?}\n \
|
||||
canvas: {}x{}+{}+{}\n \
|
||||
dispose: {:?}\n \
|
||||
needs_input: {:?}",
|
||||
frame.delay,
|
||||
frame.width, frame.height, frame.left, frame.top,
|
||||
frame.dispose,
|
||||
frame.needs_user_input
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn explain_usage() -> ! {
|
||||
println!("Print information on the frames of a gif.\n\nUsage: check <file>");
|
||||
process::exit(1)
|
||||
}
|
44
vendor/gif/examples/explode.rs
vendored
Normal file
44
vendor/gif/examples/explode.rs
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
//! Exports each GIF frame as a separate image.
|
||||
|
||||
use std::env;
|
||||
use std::fs::File;
|
||||
use std::path::PathBuf;
|
||||
|
||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let input_path = PathBuf::from(
|
||||
env::args_os()
|
||||
.nth(1)
|
||||
.ok_or("Specify a GIF path as the first argument")?,
|
||||
);
|
||||
|
||||
let input = File::open(&input_path)?;
|
||||
let mut options = gif::DecodeOptions::new();
|
||||
options.set_color_output(gif::ColorOutput::Indexed);
|
||||
let mut decoder = options.read_info(input)?;
|
||||
let screen_width = decoder.width();
|
||||
let screen_height = decoder.height();
|
||||
let global_pal = decoder.global_palette().unwrap_or_default().to_vec();
|
||||
|
||||
let output_file_stem = input_path.file_stem().unwrap().to_str().unwrap();
|
||||
let mut frame_number = 1;
|
||||
while let Some(frame) = decoder.read_next_frame()? {
|
||||
let output_path = format!("{}.{:03}.gif", output_file_stem, frame_number);
|
||||
let mut output = File::create(&output_path)?;
|
||||
let mut encoder = gif::Encoder::new(&mut output, screen_width, screen_height, &global_pal)?;
|
||||
encoder.write_frame(&frame)?;
|
||||
frame_number += 1;
|
||||
|
||||
use gif::DisposalMethod::*;
|
||||
let disposal = match frame.dispose {
|
||||
Any => "any",
|
||||
Keep => "keep",
|
||||
Background => "background",
|
||||
Previous => "previous",
|
||||
};
|
||||
eprintln!(
|
||||
"Written {} ({}x{}@{}x{} delay={} {})",
|
||||
output_path, frame.width, frame.height, frame.top, frame.left, frame.delay, disposal
|
||||
);
|
||||
}
|
||||
Ok(())
|
||||
}
|
Reference in New Issue
Block a user