stitchy-core

Crates.iostitchy-core
lib.rsstitchy-core
version0.1.2
sourcesrc
created_at2023-04-29 00:13:22.24921
updated_at2024-05-11 01:15:26.718986
descriptionLibrary to combine multiple image files into a single image
homepage
repositoryhttps://github.com/grimace87/Stitchy
max_upload_size
id851773
size59,836
(grimace87)

documentation

README

Stitchy Core

example workflow Crates.io

Joins multiple existing image files into a single output. Design features include:

  • Builder structures for applying common usage
  • Collecting source files individually by path, or in bulk from directories
  • Re-exports from the image crate, on which this crate relies heavily and the output is returned as an image::DynamicImage, which is re-exported from this crate for convenience.

See the root project overview for an overview of the Stitchy ecosystem.

Typical Usage

To take the 3 most recently updated files in the current directory, ordering them oldest to newest, and writing the output to the current directory, run:

use stitchy_core::{ImageFiles, FilePathWithMetadata, OrderBy, TakeFrom, Stitch, AlignmentMode, image::ImageOutputFormat};
use std::fs::File;
use std::path::PathBuf;

fn run_stitch() -> Result<(), String> {
    let number_of_files = 3;

    let image_contents = ImageFiles::<FilePathWithMetadata>::builder()
        .add_current_directory(vec![])?
        .build()?
        .sort_and_truncate_by(
            number_of_files,
            OrderBy::Latest,
            TakeFrom::Start,
            false
        )?
        .into_image_contents(true)?;

    let output = Stitch::builder()
        .images(image_contents)
        .alignment(AlignmentMode::Horizontal)
        .stitch()?;

    let mut file_path: PathBuf = std::env::current_dir().unwrap();
    file_path.push("stitch.png");
    let mut file_writer = File::create(file_path).unwrap();
    output.write_to(&mut file_writer, ImageOutputFormat::Png)
        .map_err(|_| "Image could not be written.".to_owned())?;
    Ok(())
}

See these examples for more complicated real-world usage:

Commit count: 109

cargo fmt