magick_rust 1.0.0

Selection of Rust bindings for the ImageMagick library.
# Change Log

All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
This file follows the convention described at
[Keep a Changelog](http://keepachangelog.com/en/1.0.0/).

## [1.0.0] - 2024-05-25
### Added
- An example! After 9 years, finally an example.
### Changed
- **BREAKING CHANGES**
    * 5ohue: Refactored the current `CompositeOperator` and `ResourceType` types
      into a separate module and added many new enum wrappers around ImageMagick
      types. the caller will have less need to directly touch the `bindings`
      module to pass arguments to functions. For instance, the
      `bindings::FilterType_GaussianFilter` type is now replaced with
      `FilterType::Gaussian`, lending the API a more Rust-like aesthetic.
    * 5ohue: Replaced the not so helpful `MagickError("failed to resize image")`
      with `MagickError(self.get_exception()?.0)`. This should provide more
      helpful error messages. In some cases there is no exception given when a
      failure occurs and the caller will only see `Error:` which is even less
      helpful than before. This is due to the way the MagickWand API works,
      unfortunately.
    * 5ohue: Add `impl Send` for wand types.
- This crate will now adhere to the semantic versioning practice more rigidly
  than it had been while evolving in a pre-1.0 state.

## [0.21.0] - 2024-04-17
### Added
- yoghurt-x86: added `MagickNormalizeImage()` and `MagickOrderedDitherImage()`

## [0.20.0] - 2024-02-25
### Changed
- **BREAKING CHANGES**
    * 5ohue: added `CompositeOperator` in place of `bindings::CompositeOperator`. Instead of using `bindings::CompositeOperator_LightenIntensityCompositeOp` one must now use `CompositeOperator::LightenIntensity`.
### Added
- 5ohue: added `sigmoidal_contrast_image()` function to the wand API.

## [0.19.1] - 2023-09-23
### Changed
- Feature `disable-hdri` is now enabled by default to work around an apparent
  bug with rust-bindgen that cannot discover the `QuantumRange` constant which
  is conditionally computed during compile-time in the MagickCore library.

## [0.19.0] - 2023-06-19
### Added
- walterbm: Add `coalesce()` for image coalesce.
- FaithBeam: Add `compose_images_gravity()` for image composition.
- Upgrade dependency `bindgen` to 0.66.1

## [0.18.0] - 2023-04-15
### Changed
- **BREAKING CHANGEs**
    * jshrake: Add `map` argument to `import_image_pixels()` and change `pixels` argument to a byte slice rather than a vector reference.
### Added
- jshrake: Add `MagickAutoGammaImage` and `MagickAutoLevelImage`
- 2e0by0: add API documentation and setup automated build of docs.
### Fixed
- BeatButton: prevent segfault if `MagickGetImageBlob` returns `null`

## [0.17.0] - 2022-12-10
### Added
- walterbm: Add support for image deskew.
- Upgrade dependency `bindgen` to 0.63
- DCjanus: Upgrade dependency `bindgen` (0.59 -> 0.60)
- MaksRawski: add `DrawRectangle` and `MagickBrightnessContrastImage` bindings

## [0.16.0] - 2022-04-09
### Added
- walterbm: Add support for thumbnail image resizing.
- DCjanus: add methods `get_image_alpha_channel`, `draw_image`, `set_image_channel_mask`,
  `evaluate_image`, `border_image`, `shadow_image`, `import_image_pixels`, `set_first_iterator`,
  `next_image`
- DCjanus: feat: std error compatible error
- davidwilemski: add binding for `MagickStripImage()`

## [0.15.0] - 2021-08-10
### Added
- glebpom: Support resource limits
- lerouxrgd: Add kmeans
- danielronnkvist: modulate image
- asonix: Add quantum depth and sample method
- Drevoed: Add MagickLiquidRescaleImage and MagickImplodeImage
### Changed
- brownjohnf: Update imagemmagick checks to support 7.1
- liyunde: Fix path_separator on windows can not build
- kz6wk9: Required version bump on bindgen.
- asonix: Set environment variable with magickcore config flags
- captainbland: Add workaround for `QuantumRange` not defined error when hdri is disabled

## [0.14.0] - 2020-05-21
### Added
- npajkovsky: add `negate_image()` operation
- danielronnkvist: add `MagickFxImage` binding
- danielronnkvist: add `MagickLevelImage` binding
- danielronnkvist: add `MagickSetImageAlpha` binding
- danielronnkvist: add `MagickBlurImage` binding
- danielronnkvist: add `MagickHaldClutImage` binding
### Changed
- npajkovsky: remove use of deprecated item `try!`, use `?` instead
- npajkovsky: fix multiple redefined values on linux build
- Updated `bindgen` to `0.53.2` release, added "size_t is usize" flag.

## [0.13.0] - 2020-03-25
### Added
- danielronnkvist: Binding for MagickClutImage
- danielronnkvist: Binding for MagickSetSize
- max-frai: Add gaussian blur function

## [0.12.0] - 2019-09-09
### Added
- magiclen: Binding for set_background_color

## [0.11.0] - 2019-04-17
### Changed
- Updated `bindgen` dependency to 0.31 release and fixed compiler issues.
  Enum definitions changed again, default in bindgen is different now, and
  using `default_enum_style()` caused endless compiler errors.
- Made `get_exception_type()`, `get_exception()`, and `clear_exception()`
  on the various wand implementations.

## [0.10.0] - 2018-08-11
### Added
- Mewp: Add ping_image and ping_image_blob functions.
- Mewp: Add reset_image_page function.
- Mewp: Add set_image_alpha_channel function.
- NQNStudios: Adding binding for MagickAddImage function.
- NQNStudios: Adding doc comment and rotate_image function.
- NQNStudios: Adding binding for adaptive_resize_image function.

## [0.9.0] - 2018-05-05
### Added
- Mewp: Numerous additional MagickWand functions
### Changed
- Mewp: crop_image() now returns a Result
### Fixed
- Mewp: Fixed memory management in `string_get!`
- sindreij: Fix exporting pdf->jpeg for multi-page pdf

## [0.8.0] - 2018-02-16
### Added
- little-bobby-tables: add color-related getters and mutations
- sindreij: Add crop_image() to MagickWand

## [0.7.1] - 2017-12-30
### Changed
- gentoo90: Hide more types from bindgen to fix the build for some systems
- gentoo90: Build now supports Windows

## [0.7.0] - 2017-08-26
### Changed
- Upgrade bindgen to 0.29
- little-bobby-tables: Change to MagickWand 7.0;
  this introduces backward incompatible changes...
- `get_quantum` and `set_quantum` now take `Quantum` instead of `u16`
- `resize_image` no longer takes a `blur_factor` argument
- `InterpolatePixelMethod` was renamed `PixelInterpolateMethod`

## [0.6.6] - 2017-07-08
### Changed
- Downgrade to version 0.25.5 of `bindgen` library to avoid errors on Linux.

## [0.6.5] - 2017-07-07
### Added
- Add `compare_images()` method to `MagickWand` type.
### Changed
- Update to latest release of `bindgen` library.

## [0.6.4] - 2017-04-08
### Changed
- Actually set the version this time.

## [0.6.3] - 2017-04-08
### Changed
- Changed to use `pkg-config` crate to get MagickWand compiler settings.
- Fixed bindings generation on FreeBSD (i.e. no longer hard-coded).
- Changed the bindings generation to use `libc` prefix for C types.
- Changed the bindings generation and interface code to use Rust enums.

## [0.6.2] - 2016-10-20
### Changed
- Presence of `pkg-config` checked in `build.rs` script at build time.

## [0.6.1] - 2016-10-16
### Changed
- MagickWand version enforced in `build.rs` script at build time.

## [0.6.0] - 2016-09-20
### Changed
- Update to 0.19.0 version of rust-bindgen; rebuilds are much faster.
- Hacked bindings for FreeBSD systems due to rust-bindgen bug #385.
- gadomski: add `set_option()` method to wand API.
- gadomski: add `write_images_blob()` to create animated GIFs.

## [0.5.2] - 2016-07-17
### Changed
- Streamline error handling in `build.rs` script.
- Fix the crate version number (previously stuck at 0.4.0).

## [0.5.1] - 2016-06-25
### Changed
- hjr3: Changed `read_image_blob()` to borrow data rather than take ownership.

## [0.5.0] - 2016-05-18
### Added
- marjakm: Added numerous functions and enabled cross-compile support.

## [0.4.0] - 2016-03-29
### Added
- Add functions for detecting and correcting image orientation.

## [0.3.3] - 2016-03-17
### Changed
- Allow libc version 0.2 or higher

## [0.3.2] - 2016-02-10
### Changed
- Automatically generate `bindings.rs` using `rust-bindgen` via `build.rs` script.

## [0.3.1] - 2016-01-02
### Changed
- Fix bug `get_image_property()` to ensure C string is copied.

## [0.3.0] - 2016-01-02
### Added
- Add `get_image_property()` function to retrieve, for example, EXIF data.

## [0.2.3] - 2015-12-26
### Changed
- Upgrade to libc 0.2.4 in hopes of fixing downstream build incompatibilities.

## [0.2.2] - 2015-12-23
### Changed
- Change the build to specify the likely path to ImageMagick, for easier setup.

## [0.2.1] - 2015-09-07
### Changed
- Fix the cargo package name (replace dash with underscore).

## [0.2.0] - 2015-06-10
### Added
- Add a `fit()` function for fitting an image to a given bounds.

## [0.1.0] - 2015-06-09
### Changed
- Initial release