Skip to content

Latest commit

 

History

History
1189 lines (929 loc) · 52.4 KB

changes.rst

File metadata and controls

1189 lines (929 loc) · 52.4 KB

Wand Changelog

0.6 series

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() <wand.image.BaseImage.gaussian_blur> method with channel parameter. [507]
  • Added Image.color_threshold() <wand.image.BaseImage.color_threshold> method.
  • Added Image.convex_hull() <wand.image.BaseImage.convex_hull> method. Requires ImageMagick-7.0.10 or above.
  • Added Image.kmeans() <wand.image.BaseImage.kmeans> method. Only available with ImageMagick-7.0.10-37 or later.
  • Added Image.minimum_bounding_box() <wand.image.BaseImage.minimum_bounding_box> method. Requires ImageMagick-7.0.10 or above;
  • Added Image.white_balance() <wand.image.BaseImage.white_balance> method. Only available with ImageMagick-7.0.10-37 or later.
  • Added percent_background & background_color parameters to Image.trim() <wand.image.BaseImage.trim> method.
  • Added the following arguments to Image.connected_components() <wand.image.BaseImage.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() <wand.image.BaseImage.evaluate> method.
  • Added 'rigidaffine' operator to Image.distort() <wand.image.BaseImage.distort> method. Requires ImageMagick-7.0.10 or above.
  • Added PAPERSIZE_MAP <wand.image.PAPERSIZE_MAP> dict as a convenience lookup table.
  • Added support for setting Image.page <wand.image.BaseImage.page> attribute with papersizes defined in ~wand.image.PAPERSIZE_MAP.
  • [DOC] Created Threshold <./guide/threshold> guide.
  • [DOC] Created Quantize <./guide/quantize> guide.

Version 0.6.3

Released on September 14th, 2020.

  • Fixed buffer overflow bug in Image.connected_components() <wand.image.BaseImage.connected_components> method. [496]
  • Added Image.data_url() <wand.image.Image.data_url> method. [489]
  • Added Image.sampling_factors <wand.image.BaseImage.sampling_factors> property. [491]
  • Added Image.encipher() <wand.image.BaseImage.encipher> & Image.decipher() <wand.image.BaseImage.decipher> methods.
  • Argument fuzz for Image.transparent_color() <wand.image.BaseImage.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() <wand.image.BaseImage.transform> method.
  • Added iterator methods to directly navigate the internal image-stack.
    • Image.iterator_first() <wand.image.BaseImage.iterator_first>
    • Image.iterator_get() <wand.image.BaseImage.iterator_get>
    • Image.iterator_last() <wand.image.BaseImage.iterator_last>
    • Image.iterator_length() <wand.image.BaseImage.iterator_length>
    • Image.iterator_next() <wand.image.BaseImage.iterator_next>
    • Image.iterator_previous() <wand.image.BaseImage.iterator_previous>
    • Image.iterator_reset() <wand.image.BaseImage.iterator_reset>
    • Image.iterator_set() <wand.image.BaseImage.iterator_set>
  • Added gray & cmyk support for Numpy's array interface.
  • Fixed ~wand.display.display on Windows & MacOS when previewing MIFF & XC formats.
  • Fixed memory leak in Image.transform() <wand.image.BaseImage.transform> for ImageMagick-6.
  • Fixed animation preservation with Image.transform() <wand.image.BaseImage.transform> method. [251]
  • Fixed Image.interlace_scheme <wand.image.BaseImage.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() <wand.image.Image.save> method.
  • Added reset_coords= argument to Image.trim() <wand.image.BaseImage.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 :cMagickWandGenesis().
  • Fixed grayscalealpha spelling. [463]
  • Fixed Image.deskew() <wand.image.BaseImage.deskew> threshold argument. [467]
  • Fixed Image.alpha_channel <wand.image.BaseImage.alpha_channel> property to apply changes to all images in the stack. [468]
  • Fixed Image.trim() <wand.image.BaseImage.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() <wand.image.BaseImage.quantize> method for ImageMagick-7.
  • Added Image.combine() <wand.image.Image.combine> method. [Thanks Fred!]
  • Check __fspath__ attribute for filename parameter when calling Image.save() <wand.image.Image.save>. [452]
  • Fixed typo in ProfileDict <wand.image.ProfileDict> documentation. [450 by Thijs Triemstra]
  • Fixed typo in Resource.c_is_resource <wand.resource.Resource.c_is_resource> documentation. [448]
  • Updated broken sentence in Image.thumbnail() <wand.image.BaseImage.thumbnail> method. [446]
  • Check for linux_distribution() <platform.linux_distribution> as method was removed in Python 3.8. [456]
  • Added Image.delay <wand.image.BaseImage.delay> property. Previously only available with ~wand.sequence.SingleImage class.

Version 0.5.8

Released on December 5th, 2019.

  • Check WAND_MAGICK_LIBRARY_SUFFIX for additional library suffixes. [436]
  • Fixed :cMagickCompareImagesLayers loading for ImageMagick-6 [439]
  • Fixed incorrect color values for first 5 pixels when exporting to numpy.array [442]
  • Updated example in Image.annotate() <wand.image.BaseImage.annotate> docstring. [441 by alexgv]
  • Fixed Image.resolution <wand.image.BaseImage.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() <wand.image.BaseImage.color_decision_list> method.
  • Added Image.contrast() <wand.image.BaseImage.contrast> method.
  • Added Image.local_contrast() <wand.image.BaseImage.local_contrast> method.
  • Added Image.ordered_dither() <wand.image.BaseImage.ordered_dither> method.
  • Added Image.random_threshold() <wand.image.BaseImage.random_threshold> method.
  • Added Image.read_mask() <wand.image.BaseImage.read_mask> method. [433]
  • Added Image.scale() <wand.image.BaseImage.scale> method.
  • Added Image.sepia_tone() <wand.image.BaseImage.sepia_tone> method.
  • Added Image.swirl() <wand.image.BaseImage.swirl> method.
  • Added Image.write_mask() <wand.image.BaseImage.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() <wand.image.BaseImage.blur>
    • Image.gaussian_blur() <wand.image.BaseImage.gaussian_blur>
    • Image.selective_blur() <wand.image.BaseImage.selective_blur>
    • Image.spread() <wand.image.BaseImage.spread>
    • Image.unsharp_mask() <wand.image.BaseImage.unsharp_mask>
  • Restored 320 fix. [Reported by 435]
  • Added colorspace & units argument to ~wand.image.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() <wand.image.BaseImage.annotate> method. [418]
  • Added Image.level_colors() <wand.image.BaseImage.level_colors> method.
  • Added Image.levelize_colors() <wand.image.BaseImage.levelize_colors> method.
  • Added Image.parse_meta_geometry() <wand.image.BaseImage.parse_meta_geometry> method.
  • Added Image.percent_escape() <wand.image.BaseImage.percent_escape> helper method. [421]
  • Added Image.ping() <wand.image.Image.ping> class method. [425]
  • Added mean_color, keep, & remove parameters in Image.connected_components() <wand.image.BaseImage.connected_components> method.

Version 0.5.5

Released on July 8th, 2019.

  • Rewrote Image.contrast_stretch() <wand.image.BaseImage.contrast_stretch> method to follow modern CLI behavior.
  • Added Image.chop() <wand.image.BaseImage.chop> method.
  • Added Image.clahe() <wand.image.BaseImage.clahe> method.
  • Added Image.features() <wand.image.BaseImage.features> method.
  • Added Image.forward_fourier_transform() <wand.image.BaseImage.forward_fourier_transform> method.
  • Added Image.inverse_fourier_transform() <wand.image.BaseImage.inverse_fourier_transform> method.
  • Added Image.magnify() <wand.image.BaseImage.magnify> method.
  • Added channel parameter support for the following methods.
    • Image.adaptive_blur() <wand.image.BaseImage.adaptive_blur>
    • Image.adaptive_sharpen() <wand.image.BaseImage.adaptive_sharpen>
    • Image.blur() <wand.image.BaseImage.blur>
    • Image.brightness_contrast() <wand.image.BaseImage.brightness_contrast>
    • Image.clamp() <wand.image.BaseImage.clamp>
    • Image.clut() <wand.image.BaseImage.clut>
    • Image.equalize() <wand.image.BaseImage.equalize>
    • Image.gaussian_blur() <wand.image.BaseImage.gaussian_blur>
    • Image.hald_clut() <wand.image.BaseImage.hald_clut>
    • Image.noise() <wand.image.BaseImage.noise>
    • Image.morphology() <wand.image.BaseImage.morphology>
    • Image.opaque_paint() <wand.image.BaseImage.opaque_paint>
    • Image.selective_blur() <wand.image.BaseImage.selective_blur>
    • Image.sharpen() <wand.image.BaseImage.sharpen>
    • Image.sigmoidal_contrast() <wand.image.BaseImage.sigmoidal_contrast>
    • Image.solarize() <wand.image.BaseImage.solarize>
    • Image.statistic() <wand.image.BaseImage.statistic>
    • Image.unsharp_mask() <wand.image.BaseImage.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() <wand.image.BaseImage.auto_threshold>
    • Image.canny() <wand.image.BaseImage.canny>
    • Image.complex() <wand.image.BaseImage.complex>
    • Image.connected_components() <wand.image.BaseImage.connected_components>
    • Image.hough_lines() <wand.image.BaseImage.hough_lines>
    • Image.kuwahara() <wand.image.BaseImage.kuwahara>
    • Image.levelize() <wand.image.BaseImage.levelize>
    • Image.mean_shift() <wand.image.BaseImage.mean_shift>
    • Image.polynomial() <wand.image.BaseImage.polynomial>
    • Image.range_threshold() <wand.image.BaseImage.range_threshold>
    • Image.seed <wand.image.BaseImage.seed>
    • Image.wavelet_denoise() <wand.image.BaseImage.wavelet_denoise>

Version 0.5.4

Released on May 25th, 2019.

  • Rewrote ~wand.api.libc library loader. [409]
  • Respect background parameter in Image.__init__() <wand.image.Image.__init__> constructor. [410]
  • Fixed Drawing.get_font_metrics() <wand.drawing.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() <wand.image.BaseImage.export_pixels> & Image.import_pixels() <wand.image.BaseImage.import_pixels> methods. [413]
  • Added Image.auto_gamma() <wand.image.BaseImage.auto_gamma> method.
  • Added Image.auto_level() <wand.image.BaseImage.auto_level> method.
  • Added Image.border_color <wand.image.BaseImage.border_color> property.
  • Added Image.brightness_contrast() <wand.image.BaseImage.brightness_contrast> method.
  • Added Image.mode() <wand.image.BaseImage.mode> method.
  • Added Image.motion_blur() <wand.image.BaseImage.motion_blur> method.
  • Added Image.oil_paint() <wand.image.BaseImage.oil_paint> method.
  • Added Image.opaque_paint() <wand.image.BaseImage.opaque_paint> method.
  • Added Image.polaroid() <wand.image.BaseImage.polaroid> method.
  • Added Image.rendering_intent <wand.image.BaseImage.rendering_intent> property.
  • Added Image.rotational_blur() <wand.image.BaseImage.rotational_blur> method.
  • Added Image.scene <wand.image.BaseImage.scene> property.
  • Added Image.shear() <wand.image.BaseImage.shear> method.
  • Added Image.sigmoidal_contrast() <wand.image.BaseImage.sigmoidal_contrast> method.
  • Added Image.similarity() <wand.image.BaseImage.similarity> method.
  • Added Image.stegano() <wand.image.BaseImage.stegano> method.
  • Added Image.stereogram() <wand.image.Image.stereogram> class method.
  • Added Image.texture() <wand.image.BaseImage.texture> method.
  • Added Image.thumbnail() <wand.image.BaseImage.thumbnail> method. [357 by yoch]
  • Added Image.ticks_per_second <wand.image.BaseImage.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 <wand.image.BaseImage.composite> & Image.composite_channel <wand.image.BaseImage.composite_channel> to include optional arguments for composite methods that require extra controls.
  • Updated Image.composite <wand.image.BaseImage.composite> & Image.composite_channel <wand.image.BaseImage.composite_channel> to include optional gravity argument.
  • Support for numpy arrays. [65]
    • Added Image.from_array <wand.image.Image.from_array> class method.
  • Support color map / palette manipulation. [403]
    • Added Image.colors <wand.image.BaseImage.colors> property.
    • Added Image.color_map() <wand.image.BaseImage.color_map> method.
    • Added Image.cycle_color_map() <wand.image.BaseImage.cycle_color_map> method.
  • Support for highlight & lowlight has been added to Image.compare() <wand.image.BaseImage.compare> method.
  • Support for PEP-519 for objects implementing __fspath__, in ~wand.compat.encode_filename.
  • Added Image.adaptive_blur() <wand.image.BaseImage.adaptive_blur> method.
  • Added Image.adaptive_resize() <wand.image.BaseImage.adaptive_resize> method.
  • Added Image.adaptive_sharpen() <wand.image.BaseImage.adaptive_sharpen> method.
  • Added Image.adaptive_threshold() <wand.image.BaseImage.adaptive_threshold> method.
  • Added Image.black_threshold() <wand.image.BaseImage.black_threshold> method.
  • Added Image.blue_shift() <wand.image.BaseImage.blue_shift> method.
  • Added Image.charcoal() <wand.image.BaseImage.charcoal> method.
  • Added Image.color_matrix() <wand.image.BaseImage.color_matrix> method.
  • Added Image.colorize() <wand.image.BaseImage.colorize> method.
  • Added Image.fuzz <wand.image.BaseImage.fuzz> property.
  • Added Image.kurtosis <wand.image.BaseImage.kurtosis> property.
  • Added Image.kurtosis_channel() <wand.image.BaseImage.kurtosis_channel> method
  • Added Image.maxima <wand.image.BaseImage.maxima> property.
  • Added Image.mean <wand.image.BaseImage.mean> property.
  • Added Image.mean_channel() <wand.image.BaseImage.mean_channel> method
  • Added Image.minima <wand.image.BaseImage.minima> property.
  • Added Image.noise() <wand.image.BaseImage.noise> method.
  • Added Image.range_channel() <wand.image.BaseImage.range_channel> method
  • Added Image.remap() <wand.image.BaseImage.remap> method.
  • Added Image.selective_blur() <wand.image.BaseImage.selective_blur> method.
  • Added Image.skewness <wand.image.BaseImage.skewness> property.
  • Added Image.sketch() <wand.image.BaseImage.sketch> method.
  • Added Image.smush() <wand.image.BaseImage.smush> method.
  • Added Image.sparse_color() <wand.image.BaseImage.sparse_color> method.
  • Added Image.splice() <wand.image.BaseImage.splice> method.
  • Added Image.spread() <wand.image.BaseImage.spread> method.
  • Added Image.standard_deviation <wand.image.BaseImage.standard_deviation> property.
  • Added Image.statistic() <wand.image.BaseImage.statistic> method.
  • Added Image.tint() <wand.image.BaseImage.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 ~wand.image.HistogramDict. [397]
  • Fixed compression & compression quality bug. [202 & 278]
  • Image.read() <wand.image.Image.read> will raise ~wand.exceptions.WandRuntimeError if :cMagickReadImage returns :cMagickFalse, but does not emit exception. [319]
  • Added Image.implode() <wand.image.BaseImage.implode> method.
  • Added Image.vignette() <wand.image.BaseImage.vignette> method.
  • Added Image.wave() <wand.image.BaseImage.wave> method.
  • Added Image.white_threshold() <wand.image.BaseImage.white_threshold> method.
  • Added Image.blue_primary <wand.image.BaseImage.blue_primary> property.
  • Added Image.green_primary <wand.image.BaseImage.green_primary> property.
  • Added Image.interlace_scheme <wand.image.BaseImage.interlace_scheme> property.
  • Added Image.interpolate_method <wand.image.BaseImage.interpolate_method> property.
  • Added Image.red_primary <wand.image.BaseImage.red_primary> property.
  • Added Image.white_point <wand.image.BaseImage.white_point> property.

Version 0.5.1

Released on February 15, 2019.

  • Added set pixel color via Image[x, y] = Color('...'). [105]
  • Added limits <wand.resource.ResourceLimits> helper dictionary to allows getting / setting ImageMagick's resource-limit policies. [97]
  • Fixed segmentation violation for win32 & ImageMagick-7. [389]
  • Fixed AssertError by moving ~wand.sequence.SingleImage sync behavior from destroy to context __exit__. [388]
  • Fixed memory leak in ~wand.drawing.Drawing.get_font_metrics. [390]
  • Added property setters for ~wand.color.Color attributes.
  • Added ~wand.color.Color.cyan, ~wand.color.Color.magenta, ~wand.color.Color.yellow, & ~wand.color.Color.black properties for CMYK ~wand.color.Color instances.
  • ~wand.color.Color instance can be created from HSL values with ~wand.color.Color.from_hsl() class method.
  • Added Image.compose <wand.image.BaseImage.compose> property for identifying layer visibility.
  • Added Image.profiles <wand.image.ProfileDict> 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 <wand.image.Image.artifacts>. [369]
  • Added optional stroke color/width parameters for Font <wand.font.Font>.
  • Image layers support (22)

    • Added Image.coalesce() <wand.image.BaseImage.coalesce> method.
    • Added Image.deconstruct <wand.image.BaseImage.deconstruct> method.
    • Added Image.dispose <wand.image.BaseImage.dispose> property.
    • Added Image.optimize_layers() <wand.image.BaseImage.optimize_layers> method.
    • Added Image.optimize_transparency() <wand.image.BaseImage.optimize_transparency> method.
  • Implemented __array_interface__ for NumPy [65]
  • Migrated the following methods & attributes from Image <wand.image.Image> to BaseImage <wand.image.BaseImage> for a more uniformed code-base.

    • Image.compression <wand.image.BaseImage.compression>
    • Image.format <wand.image.BaseImage.format>
    • Image.auto_orient() <wand.image.BaseImage.auto_orient>
    • Image.border() <wand.image.BaseImage.border>
    • Image.contrast_stretch() <wand.image.BaseImage.contrast_stretch>
    • Image.gamma() <wand.image.BaseImage.gamma>
    • Image.level() <wand.image.BaseImage.level>
    • Image.linear_stretch() <wand.image.BaseImage.linear_stretch>
    • Image.normalize() <wand.image.BaseImage.normalize>
    • Image.strip() <wand.image.BaseImage.strip>
    • Image.transpose() <wand.image.BaseImage.transpose>
    • Image.transverse() <wand.image.BaseImage.transverse>
    • Image.trim() <wand.image.BaseImage.trim>
  • Added Image.clut() <wand.image.BaseImage.clut> method.
  • Added Image.concat() <wand.image.BaseImage.concat> method. [177]
  • Added Image.deskew() <wand.image.BaseImage.deskew> method.
  • Added Image.despeckle() <wand.image.BaseImage.despeckle> method.
  • Added Image.edge() <wand.image.BaseImage.edge> method.
  • Added Image.emboss() <wand.image.BaseImage.emboss> method. [196]
  • Added Image.enhance() <wand.image.BaseImage.enhance> method. [132]
  • Added Image.export_pixels() <wand.image.BaseImage.export_pixels> method.
  • Added Image.import_pixels() <wand.image.BaseImage.import_pixels> method.
  • Added Image.morphology() <wand.image.BaseImage.morphology> method. [132]
  • Added Image.posterize() <wand.image.BaseImage.posterize> method.
  • Added Image.shade() <wand.image.BaseImage.shade> method.
  • Added Image.shadow() <wand.image.BaseImage.shadow> method.
  • Added Image.sharpen() <wand.image.BaseImage.sharpen> method. [132]
  • Added Image.shave() <wand.image.BaseImage.shave> method.
  • Added Image.unique_colors() <wand.image.BaseImage.unique_colors> method.
  • Method Drawing.draw() <wand.drawing.Drawing.draw> now accepts BaseImage <wand.image.BaseImage> for folks extended classes.
  • Added Image.loop <wand.image.BaseImage.loop> property. [227]
  • Fixed SingleImage.delay <wand.sequence.SingleImage.delay> property. [153]
  • Attribute Image.font_antialias <wand.image.BaseImage.font_antialias> has been deprecated in favor of Image.antialias <wand.image.BaseImage.antialias>. [218]
  • Fixed ordering of COMPRESSION_TYPES <wand.image.COMPRESSION_TYPES> based on ImageMagick version. [309]
  • Fixed drawing on SingleImage <wand.sequence.SingleImage>. [289]
  • Fixed wrapping issue for larger offsets when using gravity kwarg in Image.crop() <wand.image.BaseImage.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() <wand.image.BaseImage.blur> method (:cMagickBlurImage()). [311 by Alexander Karpinsky]
  • Added Image.extent() <wand.image.BaseImage.extent> method (:cMagickExtentImage()). [233 by Jae-Myoung Yu]
  • Added Image.resample() <wand.image.BaseImage.resample> method (:cMagickResampleImage()). [244 by Zio Tibia]

Version 0.4.4

Released on October 22, 2016.

  • Added ~wand.exceptions.BaseError, ~wand.exceptions.BaseWarning, and ~wand.exceptions.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[] <wand.sequence.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 ~.wand.image.Image objects. [265]
  • Added Image.compare() <wand.image.BaseImage.compare> method (:cMagickCompareImages()). [238, 268 by Gyusun Yeom]
  • Added Image.page <wand.image.BaseImage.page> and related properties for virtual canvas handling. [284 by Dan Harrison]
  • Added Image.merge_layers() <wand.image.BaseImage.merge_layers> method (:cMagickMergeImageLayers()). [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() <wand.image.BaseImage.quantize> method (:cMagickQuantizeImage()). [152 by Kang Hyojun, 262 by Jeong YunWon]
  • Added Image.transform_colorspace() <wand.image.BaseImage.transform_colorspace> quantize (:cMagickTransformImageColorspace()). [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 ~.wand.image.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() <wand.image.BaseImage.auto_orient> that fixes orientation by checking EXIF tags.
  • Added Image.transverse() <wand.image.BaseImage.transverse> method (:cMagickTransverseImage()).
  • Added Image.transpose() <wand.image.BaseImage.transpose> method (:cMagickTransposeImage()).
  • Added Image.evaluate() <wand.image.BaseImage.evaluate> method.
  • Added Image.frame() <wand.image.BaseImage.frame> method.
  • Added Image.function() <wand.image.BaseImage.function> method.
  • Added Image.fx() <wand.image.BaseImage.fx> expression method.
  • Added gravity options in Image.crop() <wand.image.BaseImage.crop> method. [222 by Eric McConville]
  • Added Image.matte_color <wand.image.BaseImage.matte_color> property.
  • Added Image.virtual_pixel <wand.image.BaseImage.virtual_pixel> property.
  • Added Image.distort() <wand.image.BaseImage.distort> method.
  • Added Image.contrast_stretch() <wand.image.BaseImage.contrast_stretch> method.
  • Added Image.gamma() <wand.image.BaseImage.gamma> method.
  • Added Image.linear_stretch() <wand.image.BaseImage.linear_stretch> method.
  • Additional support for Image.alpha_channel <wand.image.BaseImage.alpha_channel>.
  • Additional query functions have been added to wand.version API. [120]
    • Added configure_options() <wand.version.configure_options> function.
    • Added fonts() <wand.version.fonts> function.
    • Added formats() <wand.version.formats> function.
  • Additional IPython support. [117]
    • Render RGB Color <wand.color.Color> preview.
    • Display each frame in image Sequence <wand.sequence.Sequence>.
  • Fixed memory-leak when accessing images constructed in Image.sequence[] <wand.sequence.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.

whatsnew/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() <wand.drawing.Drawing.arc> method (draw-arc).
    • Added Drawing.bezier() <wand.drawing.Drawing.bezier> method (draw-bezier).
    • Added Drawing.circle() <wand.drawing.Drawing.circle> method (draw-circle).
    • draw-color-and-matte
      • Added wand.drawing.PAINT_METHOD_TYPES constant.
      • Added Drawing.color() <wand.drawing.Drawing.color> method.
      • Added Drawing matte() <wand.drawing.Drawing.matte> method.
    • Added Drawing.composite() <wand.drawing.Drawing.composite> method (draw-composite).
    • Added Drawing.ellipse() <wand.drawing.Drawing.ellipse> method (draw-ellipse).
    • draw-paths
      • Added ~wand.drawing.Drawing.path_start() method.
      • Added ~wand.drawing.Drawing.path_finish() method.
      • Added ~wand.drawing.Drawing.path_close() method.
      • Added ~wand.drawing.Drawing.path_curve() method.
      • Added ~wand.drawing.Drawing.path_curve_to_quadratic_bezier() method.
      • Added ~wand.drawing.Drawing.path_elliptic_arc() method.
      • Added ~wand.drawing.Drawing.path_horizontal_line() method.
      • Added ~wand.drawing.Drawing.path_line() method.
      • Added ~wand.drawing.Drawing.path_move() method.
      • Added ~wand.drawing.Drawing.path_vertical_line() method.
    • Added Drawing.point() <wand.drawing.Drawing.point> method (draw-point).
    • Added Drawing.polygon() <wand.drawing.Drawing.polygon> method (draw-polygon).
    • Added Drawing.polyline() <wand.drawing.Drawing.polyline> method (draw-polyline).
    • draw-push-pop
      • Added ~wand.drawing.Drawing.push() method.
      • Added ~wand.drawing.Drawing.push_clip_path() method.
      • Added ~wand.drawing.Drawing.push_defs() method.
      • Added ~wand.drawing.Drawing.push_pattern() method.
      • Added ~wand.drawing.Drawing.clip_path property.
      • Added ~wand.drawing.Drawing.set_fill_pattern_url() method.
      • Added ~wand.drawing.Drawing.set_stroke_pattern_url() method.
      • Added ~wand.drawing.Drawing.pop() method.
    • Added Drawing.rectangle() <wand.drawing.Drawing.rectangle> method (draw-rectangles).
    • Added ~wand.drawing.Drawing.stroke_dash_array property.
    • Added ~wand.drawing.Drawing.stroke_dash_offset property.
    • Added ~wand.drawing.Drawing.stroke_line_cap property.
    • Added ~wand.drawing.Drawing.stroke_line_join property.
    • Added ~wand.drawing.Drawing.stroke_miter_limit property.
    • Added ~wand.drawing.Drawing.stroke_opacity property.
    • Added ~wand.drawing.Drawing.stroke_width property.
    • Added ~wand.drawing.Drawing.fill_opacity property.
    • Added ~wand.drawing.Drawing.fill_rule property.
  • Error message of ~wand.exceptions.MissingDelegateError raised by Image.liquid_rescale() <wand.image.BaseImage.liquid_rescale> became nicer.

0.3 series

Version 0.3.9

Released on December 20, 2014.

  • Added 'pdf:use-cropbox' option to Image.options <wand.image.BaseImage.options> dictionary (and ~wand.image.OPTIONS constant). [185 by Christoph Neuroth]
  • Fixed a bug that exception message was bytes instead of str on Python 3.
  • The size parameter of ~wand.font.Font class becomes optional. Its default value is 0, which means autosized. [191 by Cha, Hojeong]
  • Fixed a bug that Image.read() <wand.image.Image.read> had tried using :cMagickReadImageFile() 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() <wand.image.BaseImage.negate> method. [174 by Park Joon-Kyu]
  • Fixed a segmentation fault on Image.modulate() <wand.image.BaseImage.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() <wand.drawing.Drawing.rectangle> method. Now you can draw rectangles. <draw-rectangles> [159]
  • Added Image.compression <wand.image.BaseImage.compression> property. [171]
  • Added contextlib.nested() function to wand.compat module.
  • Fixed UnicodeEncodeError when Drawing.text() <wand.drawing.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() <wand.image.Image.save> method. [150]

Version 0.3.4

Released on September 9, 2013.

  • Added Image.modulate() <wand.image.BaseImage.modulate> method. [134 by Dan P. Smith]
  • Added Image.colorspace <wand.image.BaseImage.colorspace> property. [135 by Volodymyr Kuznetsov]
  • Added Image.unsharp_mask() <wand.image.BaseImage.unsharp_mask> method. [136 by Volodymyr Kuznetsov]
  • Added 'jpeg:sampling-factor' option to Image.options <wand.image.BaseImage.options> dictionary (and ~wand.image.OPTIONS constant). [137 by Volodymyr Kuznetsov]
  • Fixed ImageMagick shared library resolution on Arch Linux. [139, 140 by Sergey Tereschenko]
  • Added Image.sample() <wand.image.BaseImage.sample> method. [142 by Michael Allen]
  • Fixed a bug that Image.save() <wand.image.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() <wand.image.BaseImage.gaussian_blur> method.
  • Added Drawing.stroke_color <wand.drawing.Drawing.stroke_color> property. [129 by Zeray Rice]
  • Added Drawing.stroke_width <wand.drawing.Drawing.stroke_width> property. [130 by Zeray Rice]
  • Fixed a memory leak of ~wand.color.Color class. [127 by Wieland Morgenstern]
  • Fixed a bug that Image.save() <wand.image.Image.save> to stream truncates data. [128 by Michael Allen]
  • Fixed broken ~wand.display.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 <wand.image.Image.metadata> dictionary to str from bytes in Python 3.
  • Fixed CentOS compatibility [116, 124 by Pierre Vanliefland]
    • Made :cDrawSetTextInterlineSpacing() and :cDrawGetTextInterlineSpacing() optional.
    • Added exception in drawing API when trying to use :cDrawSetTextInterlineSpacing() and :cDrawGetTextInterlineSpacing() functions when they are not available.
    • Added ~wand.exceptions.WandLibraryVersionError class for library versions issues.

Version 0.3.1

Released on June 23, 2013.

  • Fixed ~exceptions.ImportError on Windows.

Version 0.3.0

Released on June 17, 2013.

whatsnew/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() <wand.drawing.Drawing.get_font_metrics> method. [69, 71 by Cha, Hojeong]
  • Added Image.caption() <wand.image.BaseImage.caption> method. [74 by Cha, Hojeong]
  • Added optional color parameter to Image.trim() <wand.image.BaseImage.trim> method.
  • Added Image.border() <wand.image.BaseImage.border> method. [2496d37f75d75e9425f95dde07033217dc8afefc by Jae-Myoung Yu]
  • Added resolution parameter to Image.read() <wand.image.Image.read> method and the constructor of ~wand.image.Image. [75 by Andrey Antukh]
  • Added Image.liquid_rescale() <wand.image.BaseImage.liquid_rescale> method which does seam carving. See also seam-carving.
  • Added Image.metadata <wand.image.Image.metadata> immutable mapping attribute and ~wand.image.Metadata mapping type for it. [56 by Michael Elovskikh]
  • Added Image.channel_images <wand.image.Image.channel_images> immutable mapping attribute and ~wand.image.ChannelImageDict mapping for it.
  • Added Image.channel_depths <wand.image.Image.channel_depths> immutable mapping attribute and ~wand.image.ChannelDepthDict mapping for it.
  • Added Image.composite_channel() <wand.image.BaseImage.composite_channel> method.
  • Added Image.read() <wand.image.Image.read> method. [58 by Piotr Florczyk]
  • Added Image.resolution <wand.image.BaseImage.resolution> property. [58 by Piotr Florczyk]
  • Added Image.blank() <wand.image.Image.blank> method. [60 by Piotr Florczyk]
  • Fixed several memory leaks. [62 by Mitch Lindgren]
  • Added ~wand.image.ImageProperty mixin class to maintain a weak reference to the parent image.
  • Ranamed wand.image.COMPOSITE_OPS to ~wand.image.COMPOSITE_OPERATORS.
  • Now it shows helpful error message when ImageMagick library cannot be found.
  • Added IPython-specialized formatter.
  • Added ~wand.version.QUANTUM_DEPTH constant.
  • Added these properties to ~wand.color.Color class:
    • ~wand.color.Color.red_quantum
    • ~wand.color.Color.green_quantum
    • ~wand.color.Color.blue_quantum
    • ~wand.color.Color.alpha_quantum
    • ~wand.color.Color.red_int8
    • ~wand.color.Color.green_int8
    • ~wand.color.Color.blue_int8
    • ~wand.color.Color.alpha_int8
  • Added Image.normalize() <wand.image.BaseImage.normalize> method. [95 by Michael Curry]
  • Added Image.transparent_color() <wand.image.BaseImage.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() <wand.image.BaseImage.flip> method.
  • Added Image.flop() <wand.image.BaseImage.flop> method.
  • Added Image.orientation <wand.image.BaseImage.orientation> property. [88574468a38015669dae903185fb328abdd717c0 by Taeho Kim]
  • wand.resource.DestroyedResourceError becomes a subtype of wand.exceptions.WandException.
  • ~wand.color.Color is now hashable, so can be used as a key of dictionaries, or an element of sets. [114 by klutzy]
  • ~wand.color.Color has ~wand.color.Color.normalized_string property.
  • ~wand.image.Image has ~wand.image.BaseImage.histogram dictionary.
  • Added optional fuzz parameter to Image.trim() <wand.image.BaseImage.trim> method. [113 by Evaldo Junior]

0.2 series

Version 0.2.4

Released on May 28, 2013.

  • Fix ~exceptions.NameError in Resource.resource <wand.resource.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() <wand.image.BaseImage.transparentize> method (and Image.watermark() <wand.image.BaseImage.watermark> method which internally uses it) didn't work.
  • Fixed segmentation fault occurred when Color.red <wand.color.Color.red>, Color.green <wand.color.Color.green>, or Color.blue <wand.color.Color.blue> is accessed.
  • Added Color.alpha <wand.color.Color.alpha> property.
  • Fixed a bug that format converting using Image.format <wand.image.BaseImage.format> property or Image.convert() <wand.image.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 ~wand.image.Image can be instantiated without any opening. Instead, it can take width/height and background. [53 by Michael Elovskikh]
  • Added Image.transform() <wand.image.BaseImage.transform> method which is a convenience method accepting geometry strings to perform cropping and resizing. [50 by Mitch Lindgren]
  • Added Image.units <wand.image.BaseImage.units> property. [45 by Piotr Florczyk]
  • Now Image.resize() <wand.image.BaseImage.resize> method raises a proper error when it fails for any reason. [41 by Piotr Florczyk]
  • Added Image.type <wand.image.BaseImage.type> property. [33 by Yauhen Yakimovich, 42 by Piotr Florczyk]

Version 0.2.1

Released on August 19, 2012. Beta version.

  • Added Image.trim() <wand.image.BaseImage.trim> method. [26 by Jökull Sólberg Auðunsson]
  • Added Image.depth <wand.image.BaseImage.depth> property. [31 by Piotr Florczyk]
  • Now ~wand.image.Image can take an optional format hint. [32 by Michael Elovskikh]
  • Added Image.alpha_channel <wand.image.BaseImage.alpha_channel> property. [35 by Piotr Florczyk]
  • The default value of Image.resize() <wand.image.BaseImage.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:
    • ~wand.version.MAGICK_VERSION (:cGetMagickVersion)
    • ~wand.version.MAGICK_VERSION_INFO (:cGetMagickVersion)
    • ~wand.version.MAGICK_VERSION_NUMBER (:cGetMagickVersion)
    • ~wand.version.MAGICK_RELEASE_DATE (:cGetMagickReleaseDate)
    • ~wand.version.MAGICK_RELEASE_DATE_STRING (:cGetMagickReleaseDate)

Version 0.2.0

Released on June 20, 2012. Alpha version.

  • Added Image.transparentize() <wand.image.BaseImage.transparentize> method. [19 by Jeremy Axmacher]
  • Added Image.composite() <wand.image.BaseImage.composite> method. [19 by Jeremy Axmacher]
  • Added Image.watermark() <wand.image.BaseImage.watermark> method. [19 by Jeremy Axmacher]
  • Added Image.quantum_range <wand.image.BaseImage.quantum_range> property. [19 by Jeremy Axmacher]
  • Added Image.reset_coords() <wand.image.BaseImage.reset_coords> method and reset_coords option to Image.rotate() <wand.image.BaseImage.rotate> method. [20 by Juan Pablo Scaletti]
  • Added Image.strip() <wand.image.BaseImage.strip> method. [23 by Dmitry Vukolov]
  • Added Image.compression_quality <wand.image.BaseImage.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 ~exceptions.AttributeError when it's trying to warn. [16 by Tim Dettrick]
  • Now it throws ~exceptions.ImportError instead of ~exceptions.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 <wand.image.BaseImage.background_color> property.
  • Added == operator for ~wand.image.Image type.
  • Added hash() support of ~wand.image.Image type.
  • Added Image.signature <wand.image.BaseImage.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: guide/read, guide/write and guide/resizecrop.
  • Added Image.rotate() <wand.image.BaseImage.rotate> method for in-place rotation.
  • Made Image.crop() <wand.image.BaseImage.crop> to raise proper ValueError instead of IndexError for invalid width/height arguments.
  • Changed the type of Image.resize() <wand.image.BaseImage.resize()> method's blur parameter from numbers.Rational to numbers.Real.
  • Fixed a bug of raising ~exceptions.ValueError when invalid filter has passed to Image.resize() <wand.image.BaseImage.resize> method.

Version 0.1.7

Released on November 10, 2011. Still alpha version.

  • Added Image.mimetype <wand.image.Image.mimetype> property.
  • Added Image.crop() <wand.image.BaseImage.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() <wand.image.Image.make_blob> method that changes the image format silently.
  • Added Image.format <wand.image.BaseImage.format> property.
  • Added Image.convert() <wand.image.Image.convert> method.
  • Fixed a bug about Python 2.6 compatibility.
  • Use the internal representation of :cPixelWand instead of the string representation for ~wand.color.Color type.

Version 0.1.5

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

  • Now ~wand.image.Image can read Python file objects by file keyword argument.
  • Now Image.save() <wand.image.Image.save> method can write into Python file objects by file keyword argument.
  • Image.make_blob() <wand.image.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 ~wand.image.Image.
  • Row getter for ~wand.image.Image.
  • Mac compatibility.
  • Windows compatibility.
  • 64-bit processor compatibility.

Version 0.1.2

Released on October 16, 2011. Still alpha version.

  • ~wand.image.Image implements iterable interface.
  • Added wand.color module.
  • Added the abstract base class of all Wand resource objects: wand.resource.Resource.
  • ~wand.image.Image implements slicing.
  • Cropping ~wand.image.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() <wand.image.Image.make_blob> method.
  • Added blob parameter into ~wand.image.Image constructor.
  • Added Image.resize() <wand.image.BaseImage.resize> method.
  • Added Image.save() <wand.image.Image.save> method.
  • Added Image.clone() <wand.image.BaseImage.clone> method.
  • Drawed the pretty logo picture (thanks to Hyojin Choi).

Version 0.1.0

Released on October 1, 2011. Very alpha version.