#image #join #output-image #multiple #combine #single #stitchy

stitchy-core

Library to combine multiple image files into a single image

3 releases

new 0.1.2 May 11, 2024
0.1.1 Feb 15, 2024
0.1.0 Apr 29, 2023

#774 in Images

Download history 117/week @ 2024-02-12 27/week @ 2024-02-19 30/week @ 2024-02-26 5/week @ 2024-03-04 9/week @ 2024-03-11 109/week @ 2024-03-25 30/week @ 2024-04-01 2/week @ 2024-04-22 136/week @ 2024-05-06

138 downloads per month
Used in stitchy

MIT license

59KB
1.5K SLoC

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:

Dependencies

~12MB
~62K SLoC