Detect and correct non-optimal image orientation
cargo test passes
This commit is contained in:
@ -3,6 +3,10 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
## [0.4.0] - 2016-03-29
|
||||||
|
### Changed
|
||||||
|
- Add functions for detecting and correcting image orientation.
|
||||||
|
|
||||||
## [0.3.3] - 2016-03-17
|
## [0.3.3] - 2016-03-17
|
||||||
### Changed
|
### Changed
|
||||||
- Allow libc version 0.2 or higher
|
- Allow libc version 0.2 or higher
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "magick_rust"
|
name = "magick_rust"
|
||||||
version = "0.3.3"
|
version = "0.4.0"
|
||||||
authors = ["Nathan Fiedler <nathanfiedler@fastmail.fm>"]
|
authors = ["Nathan Fiedler <nathanfiedler@fastmail.fm>"]
|
||||||
description = "Selection of Rust bindings for the ImageMagick library."
|
description = "Selection of Rust bindings for the ImageMagick library."
|
||||||
homepage = "https://github.com/nlfiedler/magick-rust"
|
homepage = "https://github.com/nlfiedler/magick-rust"
|
||||||
|
|||||||
21
src/lib.rs
21
src/lib.rs
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2015 Nathan Fiedler
|
* Copyright 2015-2016 Nathan Fiedler
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -157,6 +157,24 @@ impl MagickWand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Detect if the loaded image is not in top-left orientation, and
|
||||||
|
/// hence should be "auto" oriented so it is suitable for viewing.
|
||||||
|
pub fn requires_orientation(&self) -> bool {
|
||||||
|
unsafe {
|
||||||
|
bindings::MagickGetImageOrientation(self.wand) != bindings::TopLeftOrientation
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Automatically adjusts the loaded image so that its orientation is
|
||||||
|
/// suitable for viewing (i.e. top-left orientation).
|
||||||
|
///
|
||||||
|
/// Returns `true` if successful or `false` if an error occurred.
|
||||||
|
pub fn auto_orient(&self) -> bool {
|
||||||
|
unsafe {
|
||||||
|
bindings::MagickAutoOrientImage(self.wand) == bindings::MagickTrue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Write the current image to the provided path.
|
/// Write the current image to the provided path.
|
||||||
pub fn write_image(&self, path: &str) -> Result<(), &'static str> {
|
pub fn write_image(&self, path: &str) -> Result<(), &'static str> {
|
||||||
let c_name = CString::new(path).unwrap();
|
let c_name = CString::new(path).unwrap();
|
||||||
@ -181,7 +199,6 @@ impl MagickWand {
|
|||||||
bindings::MagickResetIterator(self.wand);
|
bindings::MagickResetIterator(self.wand);
|
||||||
bindings::MagickGetImageBlob(self.wand, &mut length)
|
bindings::MagickGetImageBlob(self.wand, &mut length)
|
||||||
};
|
};
|
||||||
// would have used Vec::from_raw_buf() but it is unstable
|
|
||||||
let mut bytes = Vec::with_capacity(length as usize);
|
let mut bytes = Vec::with_capacity(length as usize);
|
||||||
unsafe {
|
unsafe {
|
||||||
bytes.set_len(length as usize);
|
bytes.set_len(length as usize);
|
||||||
|
|||||||
BIN
tests/data/IMG_5745_rotl.JPG
Normal file
BIN
tests/data/IMG_5745_rotl.JPG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 103 KiB |
24
tests/lib.rs
24
tests/lib.rs
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2015 Nathan Fiedler
|
* Copyright 2015-2016 Nathan Fiedler
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -133,3 +133,25 @@ fn test_get_image_property() {
|
|||||||
assert!(missing_value.is_err());
|
assert!(missing_value.is_err());
|
||||||
assert_eq!("missing property", missing_value.unwrap_err());
|
assert_eq!("missing property", missing_value.unwrap_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_requires_orientation() {
|
||||||
|
START.call_once(|| {
|
||||||
|
magick_wand_genesis();
|
||||||
|
});
|
||||||
|
let wand = MagickWand::new();
|
||||||
|
assert!(wand.read_image("tests/data/IMG_5745.JPG").is_ok());
|
||||||
|
assert_eq!(false, wand.requires_orientation());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_auto_orient() {
|
||||||
|
START.call_once(|| {
|
||||||
|
magick_wand_genesis();
|
||||||
|
});
|
||||||
|
let wand = MagickWand::new();
|
||||||
|
assert!(wand.read_image("tests/data/IMG_5745_rotl.JPG").is_ok());
|
||||||
|
assert_eq!(true, wand.requires_orientation());
|
||||||
|
assert!(wand.auto_orient());
|
||||||
|
assert_eq!(false, wand.requires_orientation());
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user