nlfiedler / magick-rust

Rust bindings for ImageMagick
https://crates.io/crates/magick_rust
Apache License 2.0
254 stars 68 forks source link

Add compose_images_gravity #105

Closed FaithBeam closed 1 year ago

FaithBeam commented 1 year ago

Hello! This PR adds the compose_images_gravity method which calls the MagickCompositeImageGravity function. It'd be nice to be able to use gravity when using the composite function instead of providing coordinates.

Here is a sample program:

use std::sync::Once;

use magick_rust::{
    bindings::{
        CompositeOperator_UndefinedCompositeOp, GravityType_CenterGravity, GravityType_EastGravity,
        GravityType_NorthEastGravity, GravityType_NorthGravity, GravityType_NorthWestGravity,
        GravityType_SouthEastGravity, GravityType_SouthGravity, GravityType_SouthWestGravity,
        GravityType_UndefinedGravity, GravityType_WestGravity,
    },
    magick_wand_genesis, MagickWand,
};

static START: Once = Once::new();

fn main() {
    START.call_once(|| {
        magick_wand_genesis();
    });

    let background = MagickWand::new();
    background.read_image("src/background.png").unwrap();

    let foreground = MagickWand::new();
    foreground.read_image("src/foreground.png").unwrap();

    for g in 0..9 {
        let composite = background.clone();
        composite
            .compose_images_gravity(&foreground, CompositeOperator_UndefinedCompositeOp, g)
            .unwrap();
        let name = match g {
            GravityType_CenterGravity => "GravityType_CenterGravity.png",
            GravityType_EastGravity => "GravityType_EastGravity.png",
            GravityType_NorthEastGravity => "GravityType_NorthEastGravity.png",
            GravityType_NorthGravity => "GravityType_NorthGravity.png",
            GravityType_NorthWestGravity => "GravityType_NorthWestGravity.png",
            GravityType_SouthEastGravity => "GravityType_SouthEastGravity.png",
            GravityType_SouthGravity => "GravityType_SouthGravity.png",
            GravityType_SouthWestGravity => "GravityType_SouthWestGravity.png",
            GravityType_UndefinedGravity => "GravityType_UndefinedGravity.png",
            GravityType_WestGravity => "GravityType_WestGravity.png",
            _ => "na.png",
        };
        composite.write_image(name).unwrap();
    }
}

Here is an album with compositions https://imgur.com/a/2fXgrLU

nlfiedler commented 1 year ago

Splendid, thank you.