Browse Source

Removed an error message. Updated the caching to differentiate between file sizes.

develop
Drew Short 9 years ago
parent
commit
3a5a129cce
  1. 13
      src/cache.rs
  2. 4
      src/hash.rs

13
src/cache.rs

@ -38,11 +38,11 @@ fn get_file_hash(path: &Path) -> Result<String, Error> {
/** /**
* Put an image buffer in the cache * Put an image buffer in the cache
*/ */
pub fn put_in_cache(path: &Path, image: &ImageBuffer<image::Luma<u8>, Vec<u8>>) {
pub fn put_in_cache(path: &Path, size: u32, image: &ImageBuffer<image::Luma<u8>, Vec<u8>>) {
let hash = get_file_hash(&path); let hash = get_file_hash(&path);
match hash { match hash {
Ok(sha1) => { Ok(sha1) => {
let cache_path_str = format!("{}/{}.{}",CACHE_DIR, sha1, CACHE_FILE_EXT);
let cache_path_str = format!("{}/{}x{}_{}.{}",CACHE_DIR, size, size, sha1, CACHE_FILE_EXT);
let cached_path = Path::new(&cache_path_str); let cached_path = Path::new(&cache_path_str);
// Save the file into the cache // Save the file into the cache
match image.save(cached_path) { match image.save(cached_path) {
@ -57,12 +57,12 @@ pub fn put_in_cache(path: &Path, image: &ImageBuffer<image::Luma<u8>, Vec<u8>>)
/** /**
* Get an image buffer out of the cache * Get an image buffer out of the cache
*/ */
pub fn get_from_cache(path: &Path) -> Option<ImageBuffer<image::Luma<u8>, Vec<u8>>> {
pub fn get_from_cache(path: &Path, size: u32) -> Option<ImageBuffer<image::Luma<u8>, Vec<u8>>> {
let hash = get_file_hash(&path); let hash = get_file_hash(&path);
match hash { match hash {
Ok(sha1) => { Ok(sha1) => {
// Check if the file exists in the cache // Check if the file exists in the cache
let cache_path_str = format!("{}/{}.{}",CACHE_DIR, sha1, CACHE_FILE_EXT);
let cache_path_str = format!("{}/{}x{}_{}.{}",CACHE_DIR, size, size, sha1, CACHE_FILE_EXT);
let cached_path = Path::new(&cache_path_str); let cached_path = Path::new(&cache_path_str);
// Try to open, if it does, then we can read the image in // Try to open, if it does, then we can read the image in
match File::open(&cached_path) { match File::open(&cached_path) {
@ -70,8 +70,9 @@ pub fn get_from_cache(path: &Path) -> Option<ImageBuffer<image::Luma<u8>, Vec<u8
let image = image::open(&cached_path).unwrap(); let image = image::open(&cached_path).unwrap();
Some(image.to_luma()) Some(image.to_luma())
}, },
Err(e) => {
println!("Error: {}", e);
// Don't really care here, it just means an existing cached
// file doesn't exist, or can't be read.
Err(_) => {
None None
}, },
} }

4
src/hash.rs

@ -53,7 +53,7 @@ pub struct PerceptualHashes<'a> {
pub fn prepare_image(path: &Path, size: u32) -> PreparedImage { pub fn prepare_image(path: &Path, size: u32) -> PreparedImage {
let image_path = path.to_str().unwrap(); let image_path = path.to_str().unwrap();
// Check if we have the already converted image in a cache and use that if possible. // Check if we have the already converted image in a cache and use that if possible.
match cache::get_from_cache(&path) {
match cache::get_from_cache(&path, size) {
Some(image) => { Some(image) => {
PreparedImage { orig_path: &*image_path, image: image } PreparedImage { orig_path: &*image_path, image: image }
}, },
@ -62,7 +62,7 @@ pub fn prepare_image(path: &Path, size: u32) -> PreparedImage {
let image = image::open(path).unwrap(); let image = image::open(path).unwrap();
let small_image = image.resize_exact(size, size, FilterType::Lanczos3); let small_image = image.resize_exact(size, size, FilterType::Lanczos3);
let grey_image = small_image.to_luma(); let grey_image = small_image.to_luma();
cache::put_in_cache(&path, &grey_image);
cache::put_in_cache(&path, size, &grey_image);
PreparedImage { orig_path: &*image_path, image: grey_image } PreparedImage { orig_path: &*image_path, image: grey_image }
}, },
} }

Loading…
Cancel
Save