From eeb014af1fcd44a9be9e512e3874aaedc6105d68 Mon Sep 17 00:00:00 2001 From: Pete Gadomski Date: Tue, 2 Aug 2016 12:01:34 -0600 Subject: [PATCH] Add `set_option` method. This is useful for stuff like setting the loop option for a gif. --- src/wand/magick.rs | 12 ++++++++++++ tests/lib.rs | 15 +++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/wand/magick.rs b/src/wand/magick.rs index 0861428..b42cff7 100644 --- a/src/wand/magick.rs +++ b/src/wand/magick.rs @@ -31,6 +31,18 @@ impl MagickWand { } } + pub fn set_option(&mut self, key: &str, value: &str) -> Result<(), &'static str> { + let c_key = CString::new(key).unwrap(); + let c_value = CString::new(value).unwrap(); + let result = unsafe { + bindings::MagickSetOption(self.wand, c_key.as_ptr(), c_value.as_ptr()) + }; + match result { + bindings::MagickTrue => Ok(()), + _ => Err("failed to set option"), + } + } + pub fn annotate_image(&mut self, drawing_wand: &DrawingWand, x: f64, y: f64, angle: f64, text: &str) -> Result<(), &'static str> { let c_string = try!(CString::new(text).map_err(|_| "could not convert to cstring")); match unsafe { bindings::MagickAnnotateImage(self.wand, drawing_wand.wand, x, y, angle, c_string.as_ptr() as *const _) } { diff --git a/tests/lib.rs b/tests/lib.rs index 8b0acfd..fd6058a 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -155,3 +155,18 @@ fn test_auto_orient() { assert!(wand.auto_orient()); assert_eq!(false, wand.requires_orientation()); } + +#[test] +fn test_set_option() { + START.call_once(|| { + magick_wand_genesis(); + }); + let mut wand = MagickWand::new(); + assert!(wand.read_image("tests/data/IMG_5745.JPG").is_ok()); + // The jpeg:size option is just a hint. + wand.set_option("jpeg:size", "128x128").unwrap(); + let blob = wand.write_image_blob("jpeg").unwrap(); + assert!(wand.read_image_blob(&blob).is_ok()); + assert_eq!(192, wand.get_image_width()); + assert_eq!(144, wand.get_image_height()); +}