1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
//! A library for generating images from a random input. This create uses the `RgbImage` struct from the `image` crate to represent images.
//!
//! # Simple Example
//! ```
//! use ssl::{create_image, generate};
//!
//! // Some random string (or deliberate code)
//! let source = "Hello, I am a random string!".to_string();
//!
//! // Generate an image from the source
//! let image = generate(source, 600, 600);
//!
//! // Save image to a file (uses the `image` crate)
//! image.save("output.png").unwrap();
//!
//! ```
//!
//! # Render in Parts
//! Sometimes you want to call a function every so often while rendering an image. Usually to report rendering progress. This can be achieved with the [render_in_parts] function.
//! ```
//! use ssl::{create_image, parse_source, render_in_parts};
//!
//! // Some random string (or deliberate code)
//! let source = "Hello, I am a *different* random string!".to_string();
//!
//! // Compile source code into an expression
//! let expr = parse_source(source);
//!
//! // Render image in 10 parts, printing the progress
//! let parts = 10;
//! let image = render_in_parts(&expr, 600, 600, parts, |n| {
//! println!("Rendered {}% ...", (n+1) * 100 / parts);
//! });
//!
//! // Save image to a file (uses the `image` crate)
//! image.save("output.png").unwrap();
//! ```
//!
//! # Multiple Threads
//! Rendering an image can be a slow process. To speed things up, you can render parts of the image in parallel using multiple threads. This can be achieved with the [render_subimage] function.
#![warn(missing_docs)]
mod compiler;
mod renderer;
/// Create an image to be rendered into
pub fn create_image(width: u32, height: u32) -> image::RgbImage {
image::RgbImage::new(width, height)
}
pub use image::RgbImage;
pub use renderer::{render, render_in_parts, render_into, render_part_into, render_subimage};
pub use compiler::parser::parse_source;
/// Generate an image from a source string
pub fn generate(source: String, width: u32, height: u32) -> image::RgbImage {
let expr = parse_source(source);
renderer::render(&expr, width, height)
}