1extern crate base64;
2extern crate image;
3extern crate lcs_diff;
4
5mod diff;
6mod image_creator;
7
8use diff::*;
9use image_creator::*;
10use image::*;
11pub use base64::DecodeError;
12
13pub fn compare(
37 before: &mut DynamicImage,
38 after: &mut DynamicImage,
39 rate: f32
40) -> Result<DynamicImage, DecodeError> {
41 let compare_before = CompareImage::new(before.dimensions(), before.raw_pixels());
42 let compare_after = CompareImage::new(after.dimensions(), after.raw_pixels());
43 let result = diff(compare_before, compare_after);
44
45 let mut added: Vec<usize> = Vec::new();
46 let mut removed: Vec<usize> = Vec::new();
47 for d in result.iter() {
48 match d {
49 &lcs_diff::DiffResult::Added(ref a) => added.push(a.new_index.unwrap()),
50 &lcs_diff::DiffResult::Removed(ref r) => removed.push(r.old_index.unwrap()),
51 _ => (),
52 }
53 }
54
55 mark_org_image(before, RED, rate, &removed);
56 mark_org_image(after, GREEN, rate, &added);
57
58 get_diff_image(before.dimensions().0, after.dimensions().0, &result, rate)
59}