ril 0.10.3

Rust Imaging Library: A performant and high-level image processing crate for Rust
Documentation
use ril::prelude::*;

#[test]
fn test_text_rendering() -> ril::Result<()> {
    let font = Font::open("tests/test_font_inter.ttf", 20.0)?;
    let mut image = Image::new(512, 1024, Rgba::black());

    let (cx, cy) = image.center();
    let layout = TextLayout::new()
        .with_wrap(WrapStyle::Word)
        .with_width(image.width())
        .with_position(cx, cy)
        .with_basic_text(&font, include_str!("sample_text.txt"), Rgba::white())
        .with_align(TextAlign::Center)
        .centered();

    let bounds = layout.bounding_box();
    assert_eq!(bounds, (4, 24, 507, 999));

    image.draw(&layout);
    image.save_inferred("tests/out/text_render_output.png")
}

#[test]
fn test_text_gradient() -> ril::Result<()> {
    let font = Font::open("tests/test_font_inter.ttf", 48.0)?;
    let mut mask = Image::new(256, 64, Rgba::transparent());

    let (cx, cy) = mask.center();
    let layout = TextLayout::new()
        .with_wrap(WrapStyle::Word)
        .with_width(mask.width())
        .with_position(cx, cy)
        .with_basic_text(&font, "gradient", Rgba::white())
        .centered();

    mask.draw(&layout);

    let gradient = RadialGradient::new()
        .with_color(Rgba::new(0, 0, 255, 255))
        .with_color_at(0.75, Rgba::new(0, 255, 128, 255));

    let mut image = Image::new(256, 64, Rgba::transparent())
        .with(&Rectangle::from_bounding_box(0, 0, 256, 64).with_fill(gradient));

    image.mask_alpha(&mask.bands().3);
    image.save_inferred("tests/out/text_gradient_output.png")
}

#[test]
fn test_resize_gradient() -> ril::Result<()> {
    let gradient = RadialGradient::new()
        .with_color(Rgba::new(0, 0, 255, 255))
        .with_color(Rgba::transparent())
        .with_color_at(0.75, Rgba::new(0, 255, 128, 255));

    Image::new(2048, 512, Rgba::transparent())
        .with(&Rectangle::from_bounding_box(0, 0, 2048, 512).with_fill(gradient.clone()))
        .save_inferred("tests/out/resize_gradient_output_control.png")?;

    Image::new(256, 64, Rgba::transparent())
        .with(&Rectangle::from_bounding_box(0, 0, 256, 64).with_fill(gradient))
        .resized(2048, 512, ResizeAlgorithm::Bilinear)
        .save_inferred("tests/out/resize_gradient_output_resized.png")
}