# Wand Changelog

## 0.6 series

### Version 0.6.13

Released on November 3rd, 2023.

> - Removed broken pyproject.toml file from source distribution.

### Version 0.6.12

Released on November 3rd, 2023.

> - Fixed behavior when passing zero to `Image.chop()`. [#622]

> - Fixed libmagick yield MagickCore library on Linux. [#612]

> - Fixed removing mask when passing `None` to `Image.write_mask()` method. [#636]

> - Added new `COMPOSITE_OPERATORS` operators. [#627 by druzhynin-oleksii]

>   - `'freeze'`

>   - `'interpolate'`

>   - `'negate'`

>   - `'reflect'`

>   - `'rmse'`

>   - `'saliency'`

>   - `'seamless_blend'`

>   - `'soft_burn'`

>   - `'soft_dodge'`

>   - `'stamp'`

> - [DOC] Updated Sphinx version to 7.2.6

### Version 0.6.11

Released on January 5th, 2023.

> - Fixed format issue when calling `Image.convert()`, and `Image.make_blob()` methods. [#594]

> - Fixed storage type size for “long” & “quantum” values in `Image.export_pixels()` and `Image.import_pixels()` methods. [#596]

> - Added `filter` parameter to `Image.distort()` method.

> - [TEST] Added Python 3.11 to regression tests for github actions.

> - [TEST] Replaced `py.path` fixtures with `pythlib`. [!607 & #608 by Louis Sautier]

> - [TEST] Retired Python2 support from regression testing.

> - [TEST] Upgraded Travis CI <https://travis-ci.org/github/emcconville/wand> build environments.

### Version 0.6.10

Released on August 14th, 2022.

> - Fixed segmentation fault during resource allocation on M1 processor. [#587]

> - Fixed additional segmentation faults introduced with ImageMagick 7.1.0-45. [#587 & #586]

### Version 0.6.9

Released on August 3rd, 2022.

> - Updated `Image.fx()` method to raise `WandRuntimeError` if ImageMagick is unable to generate an image. [#582]

> - Fixed `Image.from_array()` classmethod to handle Numpy’s strided arrays. [#582]

> - Fixed segmentation fault introduced with ImageMagick 7.1.0-45. [#586]

### Version 0.6.8

Released on July 16th, 2022.

> - Added `Image.label()` method.

> - Added `Image.region()` method.

> - Updated `Image.chop()` method to support `gravity` keyword.

> - Updated `Image.extent()` method to support `gravity` keyword. [#554]

> - Added .so.9 shared library suffix to `wand.api.library_paths()` generator when searching `MAGICK_HOME` path.

> - Added `QUANTUM_SCALE` constant.

> - Added `Image.montage()` method. [#575]

> - Added `Image.roll()` method.

> - Fixed returned values for `Image.connected_components()` method for ImageMagick 7.1.1. [#574]

> - Fixed `MagickSetImageDepth()` C-API method signature. [#577 by Pavel Borzenkov]

> - Fixed `Image.encipher()` method to call the correct API. [#578 by Pavel Borzenkov]

> - [DOC] Improved `FontMetrics` documentation. [#566]

> - [TEST] Migrated CI from travis-ci.org to travis-ci.com.

> - [TEST] Removed unneeded SVG dependency from regression test.

> - [TEST] Suppressed `OptionWarning` when testing user errors.

> - [TEST] Added Python 3.9 regression test for travis-ci.com.

> - [TEST] Removed Python 3.7 & 3.8 regression test for travis-ci.com.

> - [TEST] Added Python 3.10 regression tests for github actions.

### Version 0.6.7

Released on August 16th, 2021.

> - Added `Image.image_add()` method.

> - Added `Image.image_get()` method.

> - Added `Image.image_remove()` method.

> - Added `Image.image_set()` method.

> - Added `Image.image_swap()` method.

> - Fixed sub-image extraction on read. [#532]

> - Fixed `background_color` attribute when image was not read.

> - [DOC] Completed Distortion guide. [#534]

> - [DOC] Added Morphology guide.

### Version 0.6.6

Released on February 28th, 2021.

> - Added `Image.get_image_distortion()` method.

> - Fixed QuantumType allocation for 32-bit architectures using HDRI. [#518]

> - Fixed MagickSizeType allocation for `ResourceLimits.set_resource_limit()` and segfault with `armv7l` architecture. [#520]

> - Fixed `Color` deallocation error on 32-bit architectures.

> - Deprecated `wand.color.scale_quantum_to_int8()`

> - [TEST] Deprecated PDF format from test assets.

> - [TEST] Deprecated `Drawing` test fx_wand fixture to improve parallel CI testing.

> - [TEST] Marked all ImageMagick-7 features skipped when running test suite with ImageMagick-6. [#522]

### Version 0.6.5

Released on November 29th, 2020.

> - Fixed memory allocation & deallocation bugs with PyPy3, and various memory leaks identified during regression testing. [#510]

> - [TEST] Added Python 3.9 into Github regression tests. [#513 by Thijs Triemstra]

### Version 0.6.4

Released on November 21st, 2020.

> - Fixed MagickFloatType mapping for s390x architecture. [#504 & #505]

> - Fixed image order when calling `wand.sequence.Sequence.__setitem__()` method. [#506]

> - Fixed `Image.gaussian_blur()` method with `channel` parameter. [#507]

> - Added `Image.color_threshold()` method.

> - Added `Image.convex_hull()` method. Requires ImageMagick-7.0.10 or above.

> - Added `Image.kmeans()` method. Only available with ImageMagick-7.0.10-37 or later.

> - Added `Image.minimum_bounding_box()` method. Requires ImageMagick-7.0.10 or above;

> - Added `Image.white_balance()` method. Only available with ImageMagick-7.0.10-37 or later.

> - Added `percent_background` & `background_color` parameters to `Image.trim()` method.

> - Added the following arguments to `Image.connected_components()`:

>   - `angle_threshold`

>   - `background_id`

>   - `circularity_threshold`

>   - `diameter_threshold`

>   - `eccentricity_threshold`

>   - `keep_colors`

>   - `keep_top`

>   - `major_axis_threshold`

>   - `minor_axis_threshold`

>   - `perimeter_threshold`

>   - `remove_colors`

> - Added `'inverse_log'` operator to `Image.evaluate()` method.

> - Added `'rigidaffine'` operator to `Image.distort()` method. Requires ImageMagick-7.0.10 or above.

> - Added `PAPERSIZE_MAP` dict as a convenience lookup table.

> - Added support for setting `Image.page` attribute with papersizes defined in `PAPERSIZE_MAP`.

> - [DOC] Created Threshold guide.

> - [DOC] Created Quantize guide.

### Version 0.6.3

Released on September 14th, 2020.

> - Fixed buffer overflow bug in `Image.connected_components()` method. [#496]

> - Added `Image.data_url()` method. [#489]

> - Added `Image.sampling_factors` property. [#491]

> - Added `Image.encipher()` & `Image.decipher()` methods.

> - Argument `fuzz` for `Image.transparent_color()` now accepts `numbers.Real` numbers.

> - Uniformed additional pre-read parameters between `Image.__init__()` & `Image.read()`.

### Version 0.6.2

Released on July 6th, 2020.

> - Added aspect cropping support for `Image.transform()` method.

> - Added iterator methods to directly navigate the internal image-stack.

>   - `Image.iterator_first()`

>   - `Image.iterator_get()`

>   - `Image.iterator_last()`

>   - `Image.iterator_length()`

>   - `Image.iterator_next()`

>   - `Image.iterator_previous()`

>   - `Image.iterator_reset()`

>   - `Image.iterator_set()`

> - Added `gray` & `cmyk` support for Numpy’s array interface.

> - Fixed `display()` on Windows & MacOS when previewing MIFF & XC formats.

> - Fixed memory leak in `Image.transform()` for ImageMagick-6.

> - Fixed animation preservation with `Image.transform()` method. [#251]

> - Fixed `Image.interlace_scheme` property. [#488]

> - [DOC] Make the documentation reproducible. [#484 by Chris Lamb]

### Version 0.6.1

Released on May 15th, 2020.

> - Fixed RuntimeError on deallocation when `allocation_map` changes. [#482 by Louis Sautier]

### Version 0.6.0

Released on May 14th, 2020.

> - Updated `numpy` array interface methods to accept / generate `shape` data values as `rows`, `columns`, and `channels`. This change should match other python-image numpy integrations. [#447]

> - Added `adjoin=` argument to `Image.save()` method.

> - Added `reset_coords=` argument to `Image.trim()` method. [#472 ]

> - Added support for `atexit`’s shutdown routine. [#248 & #361]

> - Added Python 2 classifiers to `MANIFEST.in`. [#462 by Thijs Triemstra]

> - Added both test-cases and documentation to source distribution packages. [#7, #479, #480]

> - Removed `README.rst` from `setup.py`. [#460]

> - Rewrote memory allocation manager. [#300 & #312]

> - Fixed segfault on macOS when invoking resource limits without calling `MagickWandGenesis()`.

> - Fixed `grayscalealpha` spelling. [#463]

> - Fixed `Image.deskew()` threshold argument. [#467]

> - Fixed `Image.alpha_channel` property to apply changes to all images in the stack. [#468]

> - Fixed `Image.trim()` paging offsets affected by 1x1 border. [#475]

> - [TEST] Updated Travis CI environment to Ubuntu 18.04.04 LTS (Bionic)

> - [TEST] Deprecated display fixtures.

## 0.5 series

### Version 0.5.9

Released on February 10th, 2020.

> - Fixed `dither` parameter in `Image.quantize()` method for ImageMagick-7.

> - Added `Image.combine()` method. [Thanks Fred!]

> - Check `__fspath__` attribute for `filename` parameter when calling `Image.save()`. [#452]

> - Fixed typo in `ProfileDict` documentation. [#450 by Thijs Triemstra]

> - Fixed typo in `Resource.c_is_resource` documentation. [#448]

> - Updated broken sentence in `Image.thumbnail()` method. [#446]

> - Check for `linux_distribution()` as method was removed in Python 3.8. [#456]

> - Added `Image.delay` property. Previously only available with `SingleImage` class.

### Version 0.5.8

Released on December 5th, 2019.

> - Check `WAND_MAGICK_LIBRARY_SUFFIX` for additional library suffixes. [#436]

> - Fixed `MagickCompareImagesLayers()` loading for ImageMagick-6 [#439]

> - Fixed incorrect color values for first 5 pixels when exporting to `numpy.array` [#442]

> - Updated example in `Image.annotate()` docstring. [#441 by alexgv]

> - Fixed `Image.resolution` property to return a tuple of float values. [#444]

> - Improved pycache performance by explicitly defining all ImageMagick warnings & errors in `wand.exceptions`. Previously all ImageMagick exceptions were generated dynamically during run-time.

### Version 0.5.7

Released on September 3rd, 2019.

> - Added `Image.color_decision_list()` method.

> - Added `Image.contrast()` method.

> - Added `Image.local_contrast()` method.

> - Added `Image.ordered_dither()` method.

> - Added `Image.random_threshold()` method.

> - Added `Image.read_mask()` method. [#433]

> - Added `Image.scale()` method.

> - Added `Image.sepia_tone()` method.

> - Added `Image.swirl()` method.

> - Added `Image.write_mask()` method. [#433]

> - Converted positional to key-word arguments to allow default values & allow more consistent behavior with CLI operations for the following methods:

>   - `Image.blur()`

>   - `Image.gaussian_blur()`

>   - `Image.selective_blur()`

>   - `Image.spread()`

>   - `Image.unsharp_mask()`

> - Restored #320 fix. [Reported by #435]

> - Added `colorspace` & `units` argument to `Image` init. This is useful for defining sRGB ahead of reading CMYKA PDF documents.

### Version 0.5.6

Released on August 2nd, 2019.

> - Fixed invalid escape sequence warnings [#428]

> - Fixed error on Drawing exception handling. [#427]

> - Fixed undefined behavior when working with image frames in ImageMagick-7. [#431]

> - Added `Image.annotate()` method. [#418]

> - Added `Image.level_colors()` method.

> - Added `Image.levelize_colors()` method.

> - Added `Image.parse_meta_geometry()` method.

> - Added `Image.percent_escape()` helper method. [#421]

> - Added `Image.ping()` class method. [#425]

> - Added `mean_color`, `keep`, & `remove` parameters in `Image.connected_components()` method.

### Version 0.5.5

Released on July 8th, 2019.

> - Rewrote `Image.contrast_stretch()` method to follow modern CLI behavior.

> - Added `Image.chop()` method.

> - Added `Image.clahe()` method.

> - Added `Image.features()` method.

> - Added `Image.forward_fourier_transform()` method.

> - Added `Image.inverse_fourier_transform()` method.

> - Added `Image.magnify()` method.

> - Added `channel` parameter support for the following methods.

>   - `Image.adaptive_blur()`

>   - `Image.adaptive_sharpen()`

>   - `Image.blur()`

>   - `Image.brightness_contrast()`

>   - `Image.clamp()`

>   - `Image.clut()`

>   - `Image.equalize()`

>   - `Image.gaussian_blur()`

>   - `Image.hald_clut()`

>   - `Image.noise()`

>   - `Image.morphology()`

>   - `Image.opaque_paint()`

>   - `Image.selective_blur()`

>   - `Image.sharpen()`

>   - `Image.sigmoidal_contrast()`

>   - `Image.solarize()`

>   - `Image.statistic()`

>   - `Image.unsharp_mask()`

> - Added support for new methods introduced with ImageMagick 7.0.8-41. Upgrade to the latest ImageMagick version to take advantage of the following features.

>   - `Image.auto_threshold()`

>   - `Image.canny()`

>   - `Image.complex()`

>   - `Image.connected_components()`

>   - `Image.hough_lines()`

>   - `Image.kuwahara()`

>   - `Image.levelize()`

>   - `Image.mean_shift()`

>   - `Image.polynomial()`

>   - `Image.range_threshold()`

>   - `Image.seed`

>   - `Image.wavelet_denoise()`

### Version 0.5.4

Released on May 25th, 2019.

> - Rewrote `libc` library loader. [#409]

> - Respect `background` parameter in `Image.__init__()` constructor. [#410]

> - Fixed `Drawing.get_font_metrics()` not raising internal ImageMagick exception on rendering error. [#411]

> - Fixed deleting image artifact value.

> - Fixed offset memory calculation in `Image.export_pixels()` & `Image.import_pixels()` methods. [#413]

> - Added `Image.auto_gamma()` method.

> - Added `Image.auto_level()` method.

> - Added `Image.border_color` property.

> - Added `Image.brightness_contrast()` method.

> - Added `Image.mode()` method.

> - Added `Image.motion_blur()` method.

> - Added `Image.oil_paint()` method.

> - Added `Image.opaque_paint()` method.

> - Added `Image.polaroid()` method.

> - Added `Image.rendering_intent` property.

> - Added `Image.rotational_blur()` method.

> - Added `Image.scene` property.

> - Added `Image.shear()` method.

> - Added `Image.sigmoidal_contrast()` method.

> - Added `Image.similarity()` method.

> - Added `Image.stegano()` method.

> - Added `Image.stereogram()` class method.

> - Added `Image.texture()` method.

> - Added `Image.thumbnail()` method. [#357 by yoch]

> - Added `Image.ticks_per_second` property.

### Version 0.5.3

Released on April 20, 2019.

> - Fixed alpha channel set to “on” & “off” values for ImageMagick-7. [#404]

> - Updated `Image.composite` & `Image.composite_channel` to include optional arguments for composite methods that require extra controls.

> - Updated `Image.composite` & `Image.composite_channel` to include optional gravity argument.

> - Support for numpy arrays. [#65]

>     - Added `Image.from_array` class method.

> - Support color map / palette manipulation. [#403]

>     - Added `Image.colors` property.

>     - Added `Image.color_map()` method.

>     - Added `Image.cycle_color_map()` method.

> - Support for `highlight` & `lowlight` has been added to `Image.compare()` method.

> - Support for PEP-519 for objects implementing `__fspath__`, in `encode_filename()`.

> - Added `Image.adaptive_blur()` method.

> - Added `Image.adaptive_resize()` method.

> - Added `Image.adaptive_sharpen()` method.

> - Added `Image.adaptive_threshold()` method.

> - Added `Image.black_threshold()` method.

> - Added `Image.blue_shift()` method.

> - Added `Image.charcoal()` method.

> - Added `Image.color_matrix()` method.

> - Added `Image.colorize()` method.

> - Added `Image.fuzz` property.

> - Added `Image.kurtosis` property.

> - Added `Image.kurtosis_channel()` method

> - Added `Image.maxima` property.

> - Added `Image.mean` property.

> - Added `Image.mean_channel()` method

> - Added `Image.minima` property.

> - Added `Image.noise()` method.

> - Added `Image.range_channel()` method

> - Added `Image.remap()` method.

> - Added `Image.selective_blur()` method.

> - Added `Image.skewness` property.

> - Added `Image.sketch()` method.

> - Added `Image.smush()` method.

> - Added `Image.sparse_color()` method.

> - Added `Image.splice()` method.

> - Added `Image.spread()` method.

> - Added `Image.standard_deviation` property.

> - Added `Image.statistic()` method.

> - Added `Image.tint()` method.

Special thanks to Fred Weinhaus for helping test this release.

### Version 0.5.2

Released on March 24, 2019.

> - Import `collections.abc` explicitly. [#398 by Stefan Naumann]

> - Fixed memory leak in `HistogramDict`. [#397]

> - Fixed compression & compression quality bug. [#202 & #278]

> - `Image.read()` will raise `WandRuntimeError` if `MagickReadImage()` returns `MagickFalse`, but does not emit exception. [#319]

> - Added `Image.implode()` method.

> - Added `Image.vignette()` method.

> - Added `Image.wave()` method.

> - Added `Image.white_threshold()` method.

> - Added `Image.blue_primary` property.

> - Added `Image.green_primary` property.

> - Added `Image.interlace_scheme` property.

> - Added `Image.interpolate_method` property.

> - Added `Image.red_primary` property.

> - Added `Image.white_point` property.

### Version 0.5.1

Released on February 15, 2019.

- Added set pixel color via Image[x, y] = Color(’…’). [#105]

- Added `limits` helper dictionary to allows getting / setting ImageMagick’s resource-limit policies. [#97]

- Fixed segmentation violation for win32 & ImageMagick-7. [#389]

- Fixed AssertError by moving `SingleImage` sync behavior from `destroy` to context `__exit__`. [#388]

- Fixed memory leak in `get_font_metrics`. [#390]

- Added property setters for `Color` attributes.

- Added `cyan`, `magenta`, `yellow`, & `black` properties for CMYK `Color` instances.

- `Color` instance can be created from HSL values with `from_hsl()` class method.

- Added `Image.compose` property for identifying layer visibility.

- Added `Image.profiles` dictionary attribute. [#249]

- Moved `collections.abc` to `wand.compat.abc` for Python-3.8. [#394 by Tero Vuotila]

- Update `wand.display` to use Python3 compatible `print()` function. [#395 by Tero Vuotila]

### Version 0.5.0

Released on January 1, 2019.

- Support for ImageMagick-7.

- Improved support for 32-bit systems.

- Improved support for non-Q16 libraries.

- Removed README.rst from setup.py’s data_files. [#336]

- Improved EXIF:ORIENTATION handling. [#364 by M. Skrzypek]

- Tolerate failures while accessing wand.api. [#220 by Utkarsh Upadhyay]

- Added support for Image Artifacts through `Image.artifacts`. [#369]

- Added optional stroke color/width parameters for `Font`.

- Image layers support (#22)

  > - Added `Image.coalesce()` method.

  > - Added `Image.deconstruct` method.

  > - Added `Image.dispose` property.

  > - Added `Image.optimize_layers()` method.

  > - Added `Image.optimize_transparency()` method.

- Implemented `__array_interface__()` for NumPy [#65]

- Migrated the following methods & attributes from `Image` to `BaseImage` for a more uniformed code-base.

  > - `Image.compression`

  > - `Image.format`

  > - `Image.auto_orient()`

  > - `Image.border()`

  > - `Image.contrast_stretch()`

  > - `Image.gamma()`

  > - `Image.level()`

  > - `Image.linear_stretch()`

  > - `Image.normalize()`

  > - `Image.strip()`

  > - `Image.transpose()`

  > - `Image.transverse()`

  > - `Image.trim()`

- Added `Image.clut()` method.

- Added `Image.concat()` method. [#177]

- Added `Image.deskew()` method.

- Added `Image.despeckle()` method.

- Added `Image.edge()` method.

- Added `Image.emboss()` method. [#196]

- Added `Image.enhance()` method. [#132]

- Added `Image.export_pixels()` method.

- Added `Image.import_pixels()` method.

- Added `Image.morphology()` method. [#132]

- Added `Image.posterize()` method.

- Added `Image.shade()` method.

- Added `Image.shadow()` method.

- Added `Image.sharpen()` method. [#132]

- Added `Image.shave()` method.

- Added `Image.unique_colors()` method.

- Method `Drawing.draw()` now accepts `BaseImage` for folks extended classes.

- Added `Image.loop` property. [#227]

- Fixed `SingleImage.delay` property. [#153]

- Attribute `Image.font_antialias` has been deprecated in favor of `Image.antialias`. [#218]

- Fixed ordering of `COMPRESSION_TYPES` based on ImageMagick version. [#309]

- Fixed drawing on `SingleImage`. [#289]

- Fixed wrapping issue for larger offsets when using gravity kwarg in `Image.crop()` method. [#367]

## 0.4 series

### Version 0.4.5

Released on November 12, 2018.

- Improve library searching when `MAGICK_HOME` environment variable is set. [#320 by Chase Anderson]

- Fixed misleading TypeError: object of type ‘NoneType’ has no len() during destroy routines. [#346 by Carey Metcalfe]

- Added `Image.blur()` method (`MagickBlurImage()`). [#311 by Alexander Karpinsky]

- Added `Image.extent()` method (`MagickExtentImage()`). [#233 by Jae-Myoung Yu]

- Added `Image.resample()` method (`MagickResampleImage()`). [#244 by Zio Tibia]

### Version 0.4.4

Released on October 22, 2016.

- Added `BaseError`, `BaseWarning`, and `BaseFatalError`, base classes for domains. [#292]

- Fixed `TypeError` during parsing version caused by format change of ImageMagick version string (introduced by 6.9.6.2). [#310, Debian bug report #841548]

- Properly fixed again memory-leak when accessing images constructed in `Image.sequence[]`. It had still leaked memory in the case an image is not closed using `with` but manual `wand.resource.Resource.destroy()`/`wand.image.Image.close()` method call. [#237]

### Version 0.4.3

Released on June 1, 2016.

- Fixed `repr()` for empty `Image` objects. [#265]

- Added `Image.compare()` method (`MagickCompareImages()`). [#238, #268 by Gyusun Yeom]

- Added `Image.page` and related properties for virtual canvas handling. [#284 by Dan Harrison]

- Added `Image.merge_layers()` method (`MagickMergeImageLayers()`). [#281 by Dan Harrison]

- Fixed `OSError` during import `libc.dylib` due to El Capitan’s SIP protection. [#275 by Ramesh Dharan]

### Version 0.4.2

Released on November 30, 2015.

- Fixed `ImportError` on MSYS2. [#257 by Eon Jeong]

- Added `Image.quantize()` method (`MagickQuantizeImage()`). [#152 by Kang Hyojun, #262 by Jeong YunWon]

- Added `Image.transform_colorspace()` quantize (`MagickTransformImageColorspace()`). [#152 by Adrian Jung, #262 by Jeong YunWon]

- Now ImageMagick DLL can be loaded on Windows even if its location is stored in the registry. [#261 by Roeland Schoukens]

- Added `depth` parameter to `Image` constructor. The `depth`, `width` and `height` parameters can be used with the `filename`, `file` and `blob` parameters to load raw pixel data. [#261 by Roeland Schoukens]

### Version 0.4.1

Released on August 3, 2015.

- Added `Image.auto_orient()` that fixes orientation by checking EXIF tags.

- Added `Image.transverse()` method (`MagickTransverseImage()`).

- Added `Image.transpose()` method (`MagickTransposeImage()`).

- Added `Image.evaluate()` method.

- Added `Image.frame()` method.

- Added `Image.function()` method.

- Added `Image.fx()` expression method.

- Added `gravity` options in `Image.crop()` method. [#222 by Eric McConville]

- Added `Image.matte_color` property.

- Added `Image.virtual_pixel` property.

- Added `Image.distort()` method.

- Added `Image.contrast_stretch()` method.

- Added `Image.gamma()` method.

- Added `Image.linear_stretch()` method.

- Additional support for `Image.alpha_channel`.

- Additional query functions have been added to `wand.version` API. [#120]

  - Added `configure_options()` function.

  - Added `fonts()` function.

  - Added `formats()` function.

- Additional IPython support. [#117]

  - Render RGB `Color` preview.

  - Display each frame in image `Sequence`.

- Fixed memory-leak when accessing images constructed in `Image.sequence[]`. [#237 by Eric McConville]

- Fixed Windows memory-deallocate errors on `wand.drawing` API. [#226 by Eric McConville]

- Fixed `ImportError` on FreeBSD. [#252 by Pellaeon Lin]

### Version 0.4.0

Released on February 20, 2015.

See also

What’s new in Wand 0.4?

  This guide introduces what’s new in Wand 0.4.

- Complete `wand.drawing` API. The whole work was done by Eric McConville. Huge thanks for his effort! [#194 by Eric McConville]

  - Added `Drawing.arc()` method (Arc).

  - Added `Drawing.bezier()` method (Bezier).

  - Added `Drawing.circle()` method (Circle).

  - Color & Matte

    - Added `wand.drawing.PAINT_METHOD_TYPES` constant.

    - Added `Drawing.color()` method.

    - Added `Drawing matte()` method.

  - Added `Drawing.composite()` method (Composite).

  - Added `Drawing.ellipse()` method (Ellipse).

  - Paths

    - Added `path_start()` method.

    - Added `path_finish()` method.

    - Added `path_close()` method.

    - Added `path_curve()` method.

    - Added `path_curve_to_quadratic_bezier()` method.

    - Added `path_elliptic_arc()` method.

    - Added `path_horizontal_line()` method.

    - Added `path_line()` method.

    - Added `path_move()` method.

    - Added `path_vertical_line()` method.

  - Added `Drawing.point()` method (Point).

  - Added `Drawing.polygon()` method (Polygon).

  - Added `Drawing.polyline()` method (Polyline).

  - Push & Pop

    - Added `push()` method.

    - Added `push_clip_path()` method.

    - Added `push_defs()` method.

    - Added `push_pattern()` method.

    - Added `clip_path` property.

    - Added `set_fill_pattern_url()` method.

    - Added `set_stroke_pattern_url()` method.

    - Added `pop()` method.

  - Added `Drawing.rectangle()` method (Rectangles).

  - Added `stroke_dash_array` property.

  - Added `stroke_dash_offset` property.

  - Added `stroke_line_cap` property.

  - Added `stroke_line_join` property.

  - Added `stroke_miter_limit` property.

  - Added `stroke_opacity` property.

  - Added `stroke_width` property.

  - Added `fill_opacity` property.

  - Added `fill_rule` property.

- Error message of `MissingDelegateError` raised by `Image.liquid_rescale()` became nicer.

## 0.3 series

### Version 0.3.9

Released on December 20, 2014.

- Added `'pdf:use-cropbox'` option to `Image.options` dictionary (and `OPTIONS` constant). [#185 by Christoph Neuroth]

- Fixed a bug that exception message was `bytes` instead of `str` on Python 3.

- The `size` parameter of `Font` class becomes optional. Its default value is 0, which means autosized. [#191 by Cha, Hojeong]

- Fixed a bug that `Image.read()` had tried using `MagickReadImageFile()` even when the given file object has no `mode` attribute. [#205 by Stephen J. Fuhry]

### Version 0.3.8

Released on August 3, 2014.

- Fixed a bug that transparent background becomes filled with white when SVG is converted to other bitmap image format like PNG. [#184]

- Added `Image.negate()` method. [#174 by Park Joon-Kyu]

- Fixed a segmentation fault on `Image.modulate()` method. [#173 by Ted Fung, #158]

- Added suggestion to install freetype also if Homebrew is used. [#141]

- Now image/x-gif also is determined as `animation`. [#181 by Juan-Pablo Scaletti]

### Version 0.3.7

Released on March 25, 2014.

- A hotfix of debug prints made at 0.3.6.

### Version 0.3.6

Released on March 23, 2014.

- Added `Drawing.rectangle()` method. Now you can draw rectangles. [#159]

- Added `Image.compression` property. [#171]

- Added `contextlib.nested()` function to `wand.compat` module.

- Fixed `UnicodeEncodeError` when `Drawing.text()` method gives Unicode `text` argument in Python 2. [#163]

- Now it now allows to use Wand when Python is invoked with the `-OO` flag. [#169 by Samuel Maudo]

### Version 0.3.5

Released on September 13, 2013.

- Fix segmentation fault on `Image.save()` method. [#150]

### Version 0.3.4

Released on September 9, 2013.

- Added `Image.modulate()` method. [#134 by Dan P. Smith]

- Added `Image.colorspace` property. [#135 by Volodymyr Kuznetsov]

- Added `Image.unsharp_mask()` method. [#136 by Volodymyr Kuznetsov]

- Added `'jpeg:sampling-factor'` option to `Image.options` dictionary (and `OPTIONS` constant). [#137 by Volodymyr Kuznetsov]

- Fixed ImageMagick shared library resolution on Arch Linux. [#139, #140 by Sergey Tereschenko]

- Added `Image.sample()` method. [#142 by Michael Allen]

- Fixed a bug that `Image.save()` preserves only one frame of the given animation when file-like object is passed. [#143, #145 by Michael Allen]

- Fixed searching of ImageMagick shared library with HDR support enabled. [#148, #149 by Lipin Dmitriy]

### Version 0.3.3

Released on August 4, 2013. It’s author’s birthday.

- Added `Image.gaussian_blur()` method.

- Added `Drawing.stroke_color` property. [#129 by Zeray Rice]

- Added `Drawing.stroke_width` property. [#130 by Zeray Rice]

- Fixed a memory leak of `Color` class. [#127 by Wieland Morgenstern]

- Fixed a bug that `Image.save()` to stream truncates data. [#128 by Michael Allen]

- Fixed broken `display()` on Python 3. [#126]

### Version 0.3.2

Released on July 11, 2013.

- Fixed incorrect encoding of filenames. [#122]

- Fixed key type of `Image.metadata` dictionary to `str` from `bytes` in Python 3.

- Fixed CentOS compatibility [#116, #124 by Pierre Vanliefland]

  - Made `DrawSetTextInterlineSpacing()` and `DrawGetTextInterlineSpacing()` optional.

  - Added exception in drawing API when trying to use `DrawSetTextInterlineSpacing()` and `DrawGetTextInterlineSpacing()` functions when they are not available.

  - Added `WandLibraryVersionError` class for library versions issues.

### Version 0.3.1

Released on June 23, 2013.

- Fixed `ImportError` on Windows.

### Version 0.3.0

Released on June 17, 2013.

See also

What’s new in Wand 0.3?

  This guide introduces what’s new in Wand 0.3.

- Now also works on Python 2.6, 2.7, and 3.2 or higher.

- Added `wand.drawing` module. [#64 by Adrian Jung]

- Added `Drawing.get_font_metrics()` method. [#69, #71 by Cha, Hojeong]

- Added `Image.caption()` method. [#74 by Cha, Hojeong]

- Added optional `color` parameter to `Image.trim()` method.

- Added `Image.border()` method. [2496d37f75d75e9425f95dde07033217dc8afefc by Jae-Myoung Yu]

- Added `resolution` parameter to `Image.read()` method and the constructor of `Image`. [#75 by Andrey Antukh]

- Added `Image.liquid_rescale()` method which does seam carving. See also Seam carving (also known as content-aware resizing).

- Added `Image.metadata` immutable mapping attribute and `Metadata` mapping type for it. [#56 by Michael Elovskikh]

- Added `Image.channel_images` immutable mapping attribute and `ChannelImageDict` mapping for it.

- Added `Image.channel_depths` immutable mapping attribute and `ChannelDepthDict` mapping for it.

- Added `Image.composite_channel()` method.

- Added `Image.read()` method. [#58 by Piotr Florczyk]

- Added `Image.resolution` property. [#58 by Piotr Florczyk]

- Added `Image.blank()` method. [#60 by Piotr Florczyk]

- Fixed several memory leaks. [#62 by Mitch Lindgren]

- Added `ImageProperty` mixin class to maintain a weak reference to the parent image.

- Ranamed `wand.image.COMPOSITE_OPS` to `COMPOSITE_OPERATORS`.

- Now it shows helpful error message when ImageMagick library cannot be found.

- Added IPython-specialized formatter.

- Added `QUANTUM_DEPTH` constant.

- Added these properties to `Color` class:

  - `red_quantum`

  - `green_quantum`

  - `blue_quantum`

  - `alpha_quantum`

  - `red_int8`

  - `green_int8`

  - `blue_int8`

  - `alpha_int8`

- Added `Image.normalize()` method. [#95 by Michael Curry]

- Added `Image.transparent_color()` method. [#98 by Lionel Koenig]

- Started supporting resizing and cropping of GIF images. [#88 by Bear Dong, #112 by Taeho Kim]

- Added `Image.flip()` method.

- Added `Image.flop()` method.

- Added `Image.orientation` property. [88574468a38015669dae903185fb328abdd717c0 by Taeho Kim]

- `wand.resource.DestroyedResourceError` becomes a subtype of `wand.exceptions.WandException`.

- `Color` is now hashable, so can be used as a key of dictionaries, or an element of sets. [#114 by klutzy]

- `Color` has `normalized_string` property.

- `Image` has `histogram` dictionary.

- Added optional `fuzz` parameter to `Image.trim()` method. [#113 by Evaldo Junior]

## 0.2 series

### Version 0.2.4

Released on May 28, 2013.

- Fix `NameError` in `Resource.resource` setter. [#89 forwarded from Debian bug report #699064 by Jakub Wilk]

- Fix the problem of library loading for Mac with Homebrew and Arch Linux. [#102 by Roel Gerrits, #44]

### Version 0.2.3

Released on January 25, 2013.

- Fixed a bug that `Image.transparentize()` method (and `Image.watermark()` method which internally uses it) didn’t work.

- Fixed segmentation fault occurred when `Color.red`, `Color.green`, or `Color.blue` is accessed.

- Added `Color.alpha` property.

- Fixed a bug that format converting using `Image.format` property or `Image.convert()` method doesn’t correctly work to save blob.

### Version 0.2.2

Released on September 24, 2012.

- A compatibility fix for FreeBSD. [Patch by Olivier Duchateau]

- Now `Image` can be instantiated without any opening. Instead, it can take `width`/`height` and `background`. [#53 by Michael Elovskikh]

- Added `Image.transform()` method which is a convenience method accepting geometry strings to perform cropping and resizing. [#50 by Mitch Lindgren]

- Added `Image.units` property. [#45 by Piotr Florczyk]

- Now `Image.resize()` method raises a proper error when it fails for any reason. [#41 by Piotr Florczyk]

- Added `Image.type` property. [#33 by Yauhen Yakimovich, #42 by Piotr Florczyk]

### Version 0.2.1

Released on August 19, 2012. Beta version.

- Added `Image.trim()` method. [#26 by Jökull Sólberg Auðunsson]

- Added `Image.depth` property. [#31 by Piotr Florczyk]

- Now `Image` can take an optional `format` hint. [#32 by Michael Elovskikh]

- Added `Image.alpha_channel` property. [#35 by Piotr Florczyk]

- The default value of `Image.resize()`’s `filter` option has changed from `'triangle'` to `'undefined'`. [#37 by Piotr Florczyk]

- Added version data of the linked ImageMagick library into `wand.version` module:

  - `MAGICK_VERSION` (`GetMagickVersion()`)

  - `MAGICK_VERSION_INFO` (`GetMagickVersion()`)

  - `MAGICK_VERSION_NUMBER` (`GetMagickVersion()`)

  - `MAGICK_RELEASE_DATE` (`GetMagickReleaseDate()`)

  - `MAGICK_RELEASE_DATE_STRING` (`GetMagickReleaseDate()`)

### Version 0.2.0

Released on June 20, 2012. Alpha version.

- Added `Image.transparentize()` method. [#19 by Jeremy Axmacher]

- Added `Image.composite()` method. [#19 by Jeremy Axmacher]

- Added `Image.watermark()` method. [#19 by Jeremy Axmacher]

- Added `Image.quantum_range` property. [#19 by Jeremy Axmacher]

- Added `Image.reset_coords()` method and `reset_coords` option to `Image.rotate()` method. [#20 by Juan Pablo Scaletti]

- Added `Image.strip()` method. [#23 by Dmitry Vukolov]

- Added `Image.compression_quality` property. [#23 by Dmitry Vukolov]

- Now the current version can be found from the command line interface: `python -m wand.version`.

## 0.1 series

### Version 0.1.10

Released on May 8, 2012. Still alpha version.

- So many Windows compatibility issues are fixed. [#14 by John Simon]

- Added `wand.api.libmagick`.

- Fixed a bug that raises `AttributeError` when it’s trying to warn. [#16 by Tim Dettrick]

- Now it throws `ImportError` instead of `AttributeError` when the shared library fails to load. [#17 by Kieran Spear]

- Fixed the example usage on index page of the documentation. [#18 by Jeremy Axmacher]

### Version 0.1.9

Released on December 23, 2011. Still alpha version.

- Now `wand.version.VERSION_INFO` becomes `tuple` and `wand.version.VERSION` becomes a string.

- Added `Image.background_color` property.

- Added `==` operator for `Image` type.

- Added `hash()` support of `Image` type.

- Added `Image.signature` property.

- Added `wand.display` module.

- Changed the theme of Sphinx documentation.

- Changed the start example of the documentation.

### Version 0.1.8

Released on December 2, 2011. Still alpha version.

- Wrote some guide documentations: Reading images, Writing images and Resizing and cropping.

- Added `Image.rotate()` method for in-place rotation.

- Made `Image.crop()` to raise proper `ValueError` instead of `IndexError` for invalid width/height arguments.

- Changed the type of `Image.resize()` method’s `blur` parameter from `numbers.Rational` to `numbers.Real`.

- Fixed a bug of raising `ValueError` when invalid `filter` has passed to `Image.resize()` method.

### Version 0.1.7

Released on November 10, 2011. Still alpha version.

- Added `Image.mimetype` property.

- Added `Image.crop()` method for in-place crop.

### Version 0.1.6

Released on October 31, 2011. Still alpha version.

- Removed a side effect of `Image.make_blob()` method that changes the image format silently.

- Added `Image.format` property.

- Added `Image.convert()` method.

- Fixed a bug about Python 2.6 compatibility.

- Use the internal representation of `PixelWand` instead of the string representation for `Color` type.

### Version 0.1.5

Released on October 28, 2011. Slightly mature alpha version.

- Now `Image` can read Python file objects by `file` keyword argument.

- Now `Image.save()` method can write into Python file objects by `file` keyword argument.

- `Image.make_blob()`’s `format` argument becomes omittable.

### Version 0.1.4

Released on October 27, 2011. Hotfix of the malformed Python package.

### Version 0.1.3

Released on October 27, 2011. Slightly mature alpha version.

- Pixel getter for `Image`.

- Row getter for `Image`.

- Mac compatibility.

- Windows compatibility.

- 64-bit processor compatibility.

### Version 0.1.2

Released on October 16, 2011. Still alpha version.

- `Image` implements iterable interface.

- Added `wand.color` module.

- Added the abstract base class of all Wand resource objects: `wand.resource.Resource`.

- `Image` implements slicing.

- Cropping `Image` using its slicing operator.

### Version 0.1.1

Released on October 4, 2011. Still alpha version.

- Now it handles errors and warnings properly and in natural way of Python.

- Added `Image.make_blob()` method.

- Added `blob` parameter into `Image` constructor.

- Added `Image.resize()` method.

- Added `Image.save()` method.

- Added `Image.clone()` method.

- Drew the pretty logo picture (thanks to Hyojin Choi).

### Version 0.1.0

Released on October 1, 2011. Very alpha version.