ENIMDA ====== Entropy-based image border detection algorithm: detect border or whitespace offset for every side of image, supports animated GIFs. |crates| |travisci| .. |crates| image:: https://img.shields.io/crates/v/enimda.svg :target: https://crates.io/crates/enimda :alt: latest version at crates.io .. |travisci| image:: https://travis-ci.org/embali/enimda-rs.svg?branch=master :target: https://travis-ci.org/embali/enimda-rs :alt: travis ci build status Documentation ------------- `https://docs.rs/enimda/ `_ Algorithm (simplified) ---------------------- For each side of the image starting from top, rotating image counterclockwise to keep side of interest on top: * Get upper block 25% of image height * Get lower block with the same height as the upper one * Calculate entropy for both blocks and their difference * Make upper block 1px less * Repeat from p.2 until we hit image edge * Border is between blocks with entropy difference maximum .. image:: https://raw.githubusercontent.com/embali/enimda-rs/master/algorithm.gif :alt: Sliding from center to edge - searching for maximum entropy difference :width: 300 :height: 300 Example ------- Find image borders: .. code-block:: rust extern crate enimda; use std::path::Path; use enimda::enimda; fn main() { let path = Path::new("source.jpeg"); let borders = enimda(&path, Some(10), Some(512), Some(50), Some(0.25), Some(0.5), Some(false)).unwrap(); println!("{:?}", borders); } Demo ---- For demo please refer to `ENIMDA Demo `_ Also it lives at `Picture Instruments `_ as 'Remove borders' instrument Tests ----- .. code-block:: bash cargo test