Wand Changelog

0.5 series

Version 0.5.5

Unreleased.

Version 0.5.4

Released on May 25th, 2019.

  • Rewrote libc library loader. [#409]
  • Respect background paramater 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 resitry. [#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]
  • 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 forwareded 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:

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.

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 representaion 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.
  • Drawed the pretty logo picture (thanks to Hyojin Choi).

Version 0.1.0

Released on October 1, 2011. Very alpha version.