From f6c55ba83636930b6a1890ca33b302dbaffe6438 Mon Sep 17 00:00:00 2001 From: little-bobby-tables Date: Wed, 23 Aug 2017 19:35:11 +0700 Subject: [PATCH] add get_image_page to MagickWand get_image_page (MagickGetImagePage) is especially useful for determining the overall dimensions of a GIF, which may have frames with different widths and heights. In such cases, get_image_width and get_image_height report the dimensions of the last frame only. --- src/wand/magick.rs | 9 +++++++++ tests/data/rust.gif | Bin 0 -> 11139 bytes tests/lib.rs | 12 ++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 tests/data/rust.gif diff --git a/src/wand/magick.rs b/src/wand/magick.rs index 048a03a..a8fbc30 100644 --- a/src/wand/magick.rs +++ b/src/wand/magick.rs @@ -152,6 +152,15 @@ impl MagickWand { } } + /// Retrieve the page geometry (width, height, x offset, y offset) of the image. + pub fn get_image_page(&self) -> (usize, usize, isize, isize) { + let (mut width, mut height, mut x, mut y) = (0usize, 0usize, 0isize, 0isize); + unsafe { + bindings::MagickGetImagePage(self.wand, &mut width, &mut height, &mut x, &mut y); + } + (width, height, x, y) + } + /// Retrieve the named image property value. pub fn get_image_property(&self, name: &str) -> Result { let c_name = CString::new(name).unwrap(); diff --git a/tests/data/rust.gif b/tests/data/rust.gif new file mode 100644 index 0000000000000000000000000000000000000000..06a1fde5683f4c92e80fb41e093aab6be67c2c37 GIT binary patch literal 11139 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
JL=UC7K->ZZjkaSUgHR$(r8 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