# Change Log

All notable changes to this project are documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).

## RMagick 6.2.0

Improvements

- Support MSYS2 ImageMagick via pkg-config on Windows (#1730)

## RMagick 6.1.5

Bug Fixes

- Fix memory leak in Image#marshal_load (#1721)
- Fix memory leak in Image::Info#page= (#1720)
- Fix memory leak in Image::Info#view= with ImageMagick 7 (#1719)
- Fix memory leak in Image::Info#authenticate= with ImageMagick 7 (#1718)
- Fix memory leak in Image#marshal_load with invalid data (#1717)

## RMagick 6.1.4

Improvements

- Improve check whether C++ compiler exists (#1708)

## RMagick 6.1.3

Bug Fixes

- Fixed an error with ImageMagick 7.1.2 on Windows when saving images using file descriptor (#1699)

## RMagick 6.1.2

Improvements

- Improve Magick::Draw#primitive performance (#1697)

## RMagick 6.1.1

Bug Fixes

- Fix FrozenError in Magick::RVG::PathData (#1675)

## RMagick 6.1.0

Bug Fixes

- Fix SEGV if read incorrect PDF file (#1671)

Improvements

- Remove multiple imagemagick version checks (#1650)
- Suppress exception at installation if ImageMagick is not installed (#1647)
- Remove unnecessary `require` (#1639)
- Remove unnecessary minimum ruby version check (#1637)
- Remove universal build configuration for system bundled ruby in macOS (#1633)
- Add `frozen_string_literal: true` magic comment (#1631)

## RMagick 6.0.1

Bug Fixes

- Fix build error on FreeBSD (#1618)
- Fix build error with GCC 14 on Windows (#1616)

## RMagick 6.0.0

Improvements

- Improve compatibility of Image#pixel_color value for ImageMagick 6 and 7 (#1591)
- Add missing constants (#1580)
- Loosen ImageMagick version check between compiled and runtime (#1526)

Bug Fixes

- Transform image according to Info#colorspace (#1594)
- Sync Image::Info attributes to image object (#1593)
- Fix install error on Windows MINGW environment (#1588)
- Fix header checks in order to use aligned_malloc expectedly (#1579)

Breaking Changes

- Change method that returns a color name to return a hex string (#1592)
  - The following methods return RGBA hex string as color name. The hex string length is according to color depth.
    - `Image#background_color`
    - `Image#border_color`
    - `Image#colormap`
    - `Image#matte_color`
    - `Image#transparent_color`
    - `Info#background_color`
    - `Info#border_color`
    - `Info#matte_color`
    - `Info#transparent_color`
  - Change default value of argument
    - The hex argument of `Pixel#to_color` has `true` by default.
- Drop ruby-mswin environment support on Windows (#1587)
- Drop Ruby 2.x support (#1540)
- Drop ImageMagick 6.7 support (#1539)

## RMagick 5.5.0

Improvements

- Add RBS signatures (#1458)
- Remove unnecessary type check in KernelInfo#{unity_add, scale} (#1514)
- Remove unnecessary type check in Image#{morphology, morphology_channel} (#1513)
- Improve HatchFill.new to accept Pixel object as color (#1512)
- Fix GraphicContext#font_weight to accept Numeric object (#1510)
- Improve GraphicContext#font_weight to accept Symbol object (#1509)
- Improve Stretchable#viewbox to use implicitly conversioned value (#1507)
- Improve RVG::Transformable#rotate to convert to Float implicitly (#1506)
- Fix Image#modulate in order to accept negative number (#1505)
- Improve Image#modulate to accept "NN%" form string (#1504)
- Implicit conversion to string with methods that expect a string (#1496)
- Coerce to string instead of using #to_s (#1495)
- Coerce to string where pass object into string interpolation (#1494)
- Fix Draw#{fill_opacity, opacity, stroke_opacity} to correctly handle arguments (#1492)
- Fix Draw#{interline_spacing, interword_spacing, kerning} to correctly handle arguments that can be converted to Float (#1491)
- Remove unnecessary type check in KernelInfo methods (#1489)
- Generate compile_flags.txt for clangd for development (#1488)
- Fix Draw#{stroke_dasharray, stroke_miterlimit} to accept object which has #to_f method (#1486)
- Fix Image#composite_affine to accept ImageList object (#1484)
- Fix Image#add_compose_mask to accept ImageList object (#1483)
- Fix incorrect number of required arguments in ArgumentError (#1482)
- Fix ImageList#sort! that should return self (#1481)
- Fix ImageList#eql? that should not raise exception if can't compare (#1479)
- Fix ImageList#<=> that should return nil if can't compare (#1478)
- Add DrawAttribute module to simplify Draw, DrawOptions and PolaroidOptions (#1477)
- Add missing attribute writer methods in Image::{DrawOptions, PolaroidOptions} (#1476)
- Add Image::PolaroidOptions#affine= (#1475)
- Add Image::PolaroidOptions#tile= (#1474)
- Attribute writer methods should return passed value (#1473)
- Return self with ImageList if Image's method return self (#1472)
- Fix Image#clut_channel to accept ImageList object (#1471)
- Fix Magick::GradientFill#fill and Magick::TextureFill#fill to accept ImageList object (#1467)

Bug Fixes

- Fix typo in order to fix NoMethodError (#1515)
- Sync compression value in order fix  the problem of compression being ignored by ImageMagick 7 (#1503)
- Add PKG_CONFIG_PATH for ImageMagick 7 in order to fix installation error on macOS (#1501)

## RMagick 5.4.4

Bug Fixes

- Fix installation error again in some environment at creatint Makefile (#1465)
- Fix Pixel#<=> which should accept other class instance (#1463)

## RMagick 5.4.3

Bug Fixes

- Fix installation error in some environment by using x flag to use C++ compiler in order to create Makefile (#1460)

## RMagick 5.4.2

Improvements

- Check C++ compiler exists (#1453)

## RMagick 5.4.1

Bug Fixes

- Fix invalid cast between different size variables (#1448)

## RMagick 5.4.0

Improvements

- Use rb_io_path() if exist because pathv attr was marked as deprecated at Ruby 3.3 (#1409)
- Add observer gem as dependency (#1411)
- Add aliases of filter type (#1439)
- Release GVL in Image#contrast (#1440)

Bug Fixes

- Use C++ compiler in order to fix installation error with latest ImageMagick 7 on Windows (#1433)

## RMagick 5.3.0

Improvements

- Support GC compaction (#1388)

Bug Fixes

- Fix memory leak in `Magick::Draw` for recentry ImageMagick 6 by removing unnecessary `GetDrawInfo()` calling (#1406)
- Fix crash on ImageList#write with animation gif (#1379)
- Windows: Fix RubyInstaller::Runtime::DllDirectory::WinApiError (#1381)

## RMagick 5.2.0

Improvements

- Add OnAlphaChannel and OffAlphaChannel to the AlphaChannelOption enumeration. (#1377)
- Add Ruby 3.2 support (#1370)

## RMagick 5.1.0

Improvements

- Improve multi-thread performance by releasing GVL (#1352)
- Add Ractor support (#1349)
- Avoid overriding compilation variables (#1365)
- Remove pkg-config command dependency (#1366)

## RMagick 5.0.0

Improvements

- Improve installer in order to avoid SEGV within pkg-config command (#1359)
- Clean up the documents and comment in source code referring to something that no longer exist (#1363)
- Remove deprecated 'tile' attribute in Draw#marshal_dump (#1364)
- Remove deprecated #instance_eval calling when block was given with Magick::ImageList#montage, Magick::Image::Info.new and more (#1362)
- Remove deprecated RMagick.rb file (#1361)
- Remove deprecated Magick.trace_proc= (#1351)
- Remove deprecated Magick::{Image, Image::Info}#monitor= (#1356)

## RMagick 4.3.0

Deprecates

- Mark Magick.trace_proc= as deprecated (#1354)
- Mark Magick::{Image, Image::Info}#monitor= as deprecated (#1353)

These methods will be removed in RMagick 5.0 and no alternative.

## RMagick 4.2.6

Improvements

- Remove test_files to reduce gem package size (#1338)

Bug Fixes

- Guard against an empty rpath (#1333)
- Call GetImageDistortion instead of IsImagesEqual to fix the issue reported in #1342 (#1343)

## RMagick 4.2.5

Bug Fixes

- Specify rpath linker option to fix dynamic lib lookup failure on Linux (#1325)
- Fix Image#profile! that can't delete exif data (#1326)

## RMagick 4.2.4

Improvements

- spec_helper: drop require_relative to lib directory (#1306)
- Fix build error with Ruby 3.1 on macOS (#1313)

Bug Fixes

- remove Mutex in trace_proc= (#1303)
- channel_mean_spec: fix floating point comparison (#1307)
- changed_predicate_spec: ensure target directory exists (#1305)
- Doc: Fix documentation of Magick::Image#crop (#1311)
- Magick::UndefinedKernel should also not be used when creating a new KernelInfo. (#1312)

## RMagick 4.2.3

Bug Fixes

- Re-add block syntax deprecation warning and fix in RMagick source (#1279) (#1280)
- Doc: Replace Magick::Montage with Magick::ImageList::Montage (#1281)
- Update shadow example (#1297)
- Escape the backslashes in windows error message (#1298)
- Also set the alpha value of the target pixel (#1299)
- Set alpha_trait to BlendPixelTrait when the alpha value of the pixel is not opaque. (#1300)

## RMagick 4.2.2

Bug Fixes:

- Remove deprecation warning about block syntax (#1272)

You are still recommended to use the block parameter instead of `self.` but
we're silencing the deprecation warning until we can get RMagick's code up to
that standard.

## RMagick 4.2.1

Bug Fixes:

- Fix compilation with optimization on glibc (#1263)

## RMagick 4.2.0

This adds a deprecation warning when using a block for image operations.
Instead of setting properties on `self`, you should accept a block argument and
modify that instead. In a future version we we no longer be binding the block
to the image.

```diff
- img.to_blob { self.quality = 75 }
+ img.to_blob { |image| image.quality = 75 }
```

Improvements:

- Updated error messages if runtime ImageMagick version was not matched with when installed rmagick (#1213)
- Improve Image#resize performance with ImageMagick 7 (#1240)
- Added new colorspaces (#1252)

Bug Fixes:

- Fix assertion failed in Magick::TextureFill.new with with unexpected argument (#1216)
- Call with yield when there is a block arguments (#701)
- Avoid crash with monitor feature on Ruby 3.0  (#1253)

## RMagick 4.1.2

Bug Fixes:

- Fix build error on Freebsd (#1199)
- Add workaround for FreeBSD that it isn't able to process PDF (#1203)

## RMagick 4.1.1

Bug Fixes:

- Fix bug of signal handling internally (#1189)

## RMagick 4.1.0

Improvements:

- reduce package size by more than 1.5mb (#849)
- improve memory usage (#836)
- add support for Ruby 2.7 (#853)
- *many* documentation fixes and cleanups
- *many* testing fixes and cleanups
- Support CMYK color in Image#get_pixels (#871)
- Support to get CMYK color in Image#pixel_color (#875)
- Support to set CMYK color in Image#pixel_color (#908)
- Add ImageList#map (#1154)

Bug Fixes:

- fixed memory leaks (#809, #815, #816, #960, #1024)
- eliminate compiler warnings (#855, #864, #878, #917, #969, #981, #996, #1000, #1044)
- Recognize invert option in Image#opaque_channel with ImageMagick 7 (#882)
- Fix heap-buffer-overflow in Image#wet_floor with ImageMagick 7 (#883)
- Handle channel value with new image in Image#opaque_channel with ImageMagick 7 (#886)
- Pass caption value into ImageMagick 7 API in Image#polaroid (#898)
- Example: Fix “uninitialized constant Magick::TransparentOpacity” error (#899)
- Example: Fix error of constant usage (#900)
- Example: Fix error in doc/ex/composite.rb (#901)
- Example: Fix error in doc/ex/crop_with_gravity.rb (#902)
- Revert removed RemapImages() calling in ImageList#remap for ImageMagick 6 (#904)
- Example: Fix alpha channel in examples/vignette.rb (#918)
- Example: Fix alpha channel in doc/ex/coalesce.rb (#920)
- Handle alpha value in Pixel#to_color (#922)
- Detect the proper ARCHFLAGS on macOS (#923)
- Handle boolean value as dither option in ImageList#quantize (#926)
- Use strlcpy instead of strncpy to ensure null terminating. (#933)
- Remove memalign() (#939)
- Add safe strlen() to ensure avoiding buffer overrun (#940)
- Use strlcpy() instead of strcpy() to ensure avoiding buffer overflow (#941)
- Use snprintf() instead of sprintf() to ensure avoiding buffer overflow (#945)
- Example: Remove unnecessary alpha setting (#950)
- Replace to correct format specifiers for size_t/ssize_t value (#978)
- Use proper format specifiers within MinGW (#997)
- Fix snprintf() format specifiers for unsigned value (#1006)
- Fix warning of “Variable is reassigned a value before the old one has been use” (#1008)
- Fix warning of “warning: explicitly assigning value of variable of type 'int' to itself” (#1013)
- Fix Image#resample to use blur option properly with ImageMagick 7 (#1023)
- Fix Image#resize to use blur option properly with ImageMagick 7 (#1032)
- Fix that Color#compliance returns nil with undefined bit (#1049)
- Check memory API properly on Windows (#1050)
- Example: Fix “undefined method `opacity’” (#1051)
- Add workaround to pdf problem (#1072)
- Fix exception message because #export_pixels accept 0 argument (#1121)
- Fix default value of `fill` argument in Image#initialize (#1122)
- Call rm_ensure_result() in creating Image object (#1144)
- Use StringValueCStr() instead of StringValuePtr() (#1156)
- Use RSTRING_PTR() to retrieve a pointer of String object for buffer (#1157)
- Use StringValueCStr() to get null-terminated C-lang string (#1158)
- Fix SEGV in Magick::Draw#marshal_load (#1162)
- Fix SEGV in rm_check_ary_len() with unexpected argument value (#1168)
- Fix SEGV in Image#marshal_load (#1169)

Breaking Changes:

- remove `tainted?` logic (#854)

## RMagick 4.1.0.rc2

- fix a couple of compilation bugs (#796, #797)

## RMagick 4.1.0.rc1

The ImageMagick 7 release is here! This adds beta support for ImageMagick 7.
Much thanks to **@Watson1978** for getting the ball rolling on this and to
**@dlemstra** for the extraordinary amount of work and patience that went into
seeing it through. RMagick should currently behave the same way under IM7 as it
did under IM6, so please open an issue if you find anything that seems out of
the ordinary.

## RMagick 4.0.0

This release removes a *lot* of deprecated functionality, so first upgrade to
3.2 and handle any deprecation warnings you see there before upgrading to 4.0.
There are a handful of removals that we could not, or forgot to deprecate, so
pay special attention to those below. This clears the road for ImageMagick 7
support in the very near future.

Breaking Changes:

- Removed deprecated Image#matte and Image#matte= (#731)
- Removed deprecated Draw#matte. (#736)
- Removed deprecated ImageList#fx. (#732)
- Removed deprecated Info#group and Info#group=. (#733)
- Removed deprecated KernelInfo#show. (#734)
- Removed deprecated Pixel#opacity and Pixel#opacity=. (#735)
- Removed deprecated KernelInfo#zero_nans. (#741)
- Removed deprecated ImageList#map (#740)
- Removed deprecated Pixel#from_HSL. (#742)
- Removed deprecated Image#alpha=. (#739)
- Removed deprecated Pixel#to_HSL. (#745)
- Removed deprecated Image#blur and Image#blur=. (#746)
- Removed deprecated Image#sync_profiles. (#754)
- Removed deprecated Image#opacity=. (#753)
- Removed deprecated Image#combine. (#752)
- Removed deprecated Image#map. (#751)
- Removed deprecated Image#mask=. (#750)
- Removed deprecated opacity arguments. (#757)
- Removed deprecated `OpaqueOpacity` and `TransparentOpacity`. (#765)
- Removed obsolete enumerations. (#766)

The following changes *did not have deprecation warnings* in 3.2, so you'll
want to double check that you update your code if you were relying on the
existing behavior:

- Changed Color#to_s to return an string that contains alpha instead of opacity. (#760)
- Changed Pixel#to_s to return a string that contains alpha instead of opacity. (#762)
- Changed Pixel#hash to use alpha instead of opacity. (#763)
- Changed Pixel#<=> to use alpha instead of opacity. (#764)
- Removed `BicubicInterpolatePixel` (use `CatromInterpolatePixel` instead) (#768)
- Removed `FilterInterpolatePixel` (no replacement) (#768)
- Renamed `NearestNeighborInterpolatePixel` to `NearestInterpolatePixel` (#768)

Enhancements:

- Add SetQuantumOperator (#755)

Bug Fixes:

- Fix SEGV in Image#each_profile (#737)

## RMagick 3.2.0

This is expected to be the final deprecation release before RMagick 4.0. We
have added loads of deprecation warnings to clear the pathway for ImageMagick 7
support. Once you've fixed all of them you should be fine to upgrade to version
4.0 without any pain. There are a small handful of edge cases which we could
not cleanly deprecate, though they should be extremely rare. These will be
documented in the 4.0 release. Thanks to @dlemstra for the hard work making
this release possible.

The biggest change in moving towards RMagick 4.0 will be the fact that
`opacity` is deprecated in favor of `alpha`.

**NOTE: `opacity` is the opposite of `alpha`!!!**

If you are currently passing opacity into methods, you will need to invert the
value and use the new `alpha:` keyword argument. If you are passing an integer,
`alpha = 255 - opacity`. An integer `opacity` of 0 is an `alpha` of 255.

Also, **major kudos to @Watson1978** for enabling Ruby's memory management in
(#697).  This should go a long way towards improving RMagick's reputation for
memory usage.

Deprecations: (To be removed in RMagick 4.0)

- `Info#group` (#578) (no replacement)
- `Image#blur` (#579) (no replacement)
- Renamed `AlphaChannelType` to `AlphaChannelOption` (#596)
- Renamed `DistortImageMethod` to `DistortMethod` (#605)
- Renamed `FilterTypes` to `FilterType` (#611)
- Renamed `InterpolatePixelMethod` to `PixelInterpolateMethod` (#613)
- Renamed `ImageLayerMethod` to `LayerMethod` (#618)
- Deprecate the `opacity` property of the Pixel class. (use `alpha` instead) (#619)
- Deprecate old enum names. (use IM7 names instead) (#627)
- `StaticGravity` (use `CenterGravity` instead) (#638)
- `Image#sync_profiles` (no replacement) (#640)
- Deprecate old metric type values (use IM7 names instead) (#647)
- Deprecate `ResetAlphaChannel` (no replacement) (#644)
- Deprecate `FlattenAlphaChannel` (no replacement) (#645)
- Deprecate `MatteChannel` (no replacement) (#646)
- Deprecate `ConstantVirtualPixelMethod` (no replacement) (#649)
- Deprecate `IntegerPixel` (no replacement) (#650)
- Deprecate `Image.combine` (use `ImageList#combine` instead) (#690)
- Deprecate `Image#opacity` (use `Image#alpha` instead) (#669)
- Deprecate unnamed argument for opacity in `Image#transparent` (use keyword `alpha:` instead) (#695)
- Deprecate unnamed argument for opacity in `Image#black_threshold` and `Image#white_threshold.` (use keyword `alpha:` instead) (#709)
- Deprecate unnamed argument for opacity in `Image#matte_flood_fill` (use keyword `alpha:` instead) (#711)
- Deprecate unnamed argument for opacity in `Image#paint_transparent` (use keyword `alpha:` instead) (#717)
- Deprecate unnamed argument for opacity in `Image#transparent_chroma.` (use keyword `alpha:` instead) (#722)
- Deprecate `Draw#matte` (use `Draw#alpha` instead) (#724)

Enhancements:

- Many internal adjustments to prepare for ImageMagick 7 support.
- Added alpha property to the pixel class. (#617)
- Add combine to the ImageList class. (#589)
- Add new alpha constants (#651)
- Add `Image#mask=` (#660)
- Add `Draw#alpha` to replace `Draw#matte` (#726)
- Add Draw#image (#720)
- Add ArchLinux support (#727)

Bug Fixes:

- Fix `Font#to_s` to not raise error (#569)
- Fix a SEGV in `Image#reduce_noise` (#576)
- Fix infinite loop in `Image#compose` (#587)
- Fix enumeration memory leaks (#592) (#594) (#606) (#610) (#626)
- Don't allow `Image#class_type` to be set to undefined (#599)
- Fixed setting the name of the clip path. (#608)
- Fix memory leak in `Info#view=` (#642)
- Fix memory leak in `Image.constitute` (#665)
- Raise error on invalid arguments in `Draw#bezier` (#674)
- Fix memory leak in `Image#sparse_color` (#683)
- Prevent negative values for `Image#convolve` (#679)
- Several cleanups and fixes in the examples
- Raise error on invalid arguments in `Draw#color` (#691)
- Raise error on invalid arguments in `Draw#opacity` (#692)
- Raise error on invalid arguments in `Draw#fill_opacity` (#693)
- Raise error on invalid arguments in `Draw#stroke_opacity` (#694)
- Raise error on invalid arguments in `Draw#font_weight` (#696)
- Raise error on invalid arguments in `Draw#pattern` (#702)
- Raise error on invalid arguments in `Draw#point` (#703)
- Raise error on invalid arguments in `Draw#font_size` (#704)
- Raise error on invalid arguments in `Draw#polygon` (#705)
- Raise error on invalid arguments in `Draw#polyline` (#706)
- Raise error on invalid arguments in `Draw#rotate` (#707)
- Raise error on invalid arguments in `Draw#scale` (#708)
- Raise error on invalid arguments in `Draw#stroke_dashoffset` (#710)
- Raise error on invalid arguments in `Draw#translate` (#713)
- Raise error on invalid arguments in `Draw#text` (#714)
- Raise error on invalid arguments in `Draw#stroke` (#715)
- Raise error on invalid arguments in `Draw#matte` (#716)
- Raise error on invalid arguments in `Draw#skewx`, `Draw#skewy` (#719)
- Fix `Image#thumbnail` to keep image aspect ratio like ImageMagick (#718)
- Fix bug where `ImageList#montage` doesn't apply `border_color` & `matte_color` (#601)
- Fix stack-buffer-overflow in `Draw#annotate` (#725)
- Enable managed memory feature (#697)

Code Quality:

- Many tests written
- Several fixes to reduce compiler warnings.

## RMagick 3.1.0

Deprecations: (To be removed in RMagick 4.0)

- Support for Ruby 2.3
- `KernelInfo#zero_nans` (#531) (no replacement)
- `KernelInfo#show` (#532) (no replacement)
- `ImageList#fx` (#529) (use `Image#fx` instead)
- `Image#alpha=` (#530) (use `Image#alpha` instead)
- `Image#mask=` (#530) (use `Image#mask` instead)
- `Image#matte` (#530) (use `Image#alpha` instead)
- `Image#matte=` (#530) (use `Image#alpha` instead)

Enhancements:

- Support ruby-mswin environment on Windows (#425)
- Add test for supporting webp format (#406)
- Add explicit Ruby 2.5 support (#339)
- Add explicit Ruby 2.6 support (#467)
- Restore support for ImageMagick 6.7 (#475)
- Add explicit ImageMagick 6.9 support (#340)
- Work towards ImageMagick 7.0 support (#470) (#487) (#489) (#492) (#494)
- Improve error messaging (#480) (#517)
- Add TimeResource support (#402)
- Add Image#fx method (#529)

Bug Fixes:

- Many, many memory leaks fixed
  (#362) (#361) (#360) (#359) (#358) (#357) (#367) (#370) (#364) (#372) (#373)
  (#374) (#375) (#376) (#385) (#384) (#383) (#382) (#381) (#380) (#379) (#378)
  (#377) (#391) (#390) (#389) (#396) (#401) (#409) (#419) (#417) (#416) (#415)
  (#414) (#413) (#412) (#411) (#410) (#418) (#454) (#453) (#452) (#451) (#450)
  (#461) (#460) (#459) (#563)
- Fix SEGV in ImageList methods with invalid image list (#356)
- Fix SEGV in Image#recolor (#387)
- Fix SEGV in Image#profile! (#400)
- Fix build error on Homebrew environment (#426)
- Fix Image#quantize and ImageList#quantize could not make dither false (#458)
- Replace obsoleted $defout to $stdout (#463)
- Avoid SEGV in monitor feature for Ruby 2.5+ (#462)
- Fix SEGV in Image#write with CMYKColorspace (#465)
- Avoid problems related to GC in monitor feature (#468)
- Get rid of compiler warnings (#484) (#491) (#500)
- Fix rmfill leaks (#528)
- Removed automatic allocation of the ImageInfo that is broken. (#547)
- Fix color histogram (#540)
- Fix Image#iptc_profile does not work with ImageMagick 6.7 (#558)

Code Quality:

- Many tests written
- CI improvements
- Other refactors

## RMagick 3.0.0

Breaking Changes:

- Drop support for Ruby < 2.3.
- Drop support for ImageMagick < 6.8.
- Raise error when `nil` or empty string are passed to `Image.read`. (#351)
- Monitor feature disabled on Windows. (#344)
- Note: ruby versions > 2.4 and ImageMagick versions > 6.8 are not *explicitly*
  supported, yet, but if you are using them already, they should continue to
  work in the same fashion.

Enhancements:

- Add feature `Image#channel_entropy` (#300)
- Many quality of life improvements in the codebase.

Bug Fixes:

- Many memory leaks fixed!
- Fix `LoadError` on Windows. (#315)
- fix argument count in `Image#morphology_channel` (#306)

## RMagick 2.16.0

- Support ImageMagick 6.9+ - @ZipoKing

## RMagick 2.15.4

- Improved C extension building process - @u338steven

## RMagick 2.15.3

- Fixed ImageMagick version detection on Windows - @maisumakun

## RMagick 2.15.2

- GitHub repository moved back to github.com/rmagick/rmagick - @wurde, @vassilevsky

## RMagick 2.15.1

- Fix loop in linked list in `ImageList` methods => they no longer hang - @u338steven

## RMagick 2.15.0

- Ability to remove alpha channel - @ollie
- C local variables guarded against GC to avoid segfaults - @u338steven
- trace_proc protected with a mutex to avoid segfaults - @u338steven

## RMagick 2.14.0

- `RMagick.rb` moved to deprecated directory - @mockdeep
- Better ImageMagick feature detection - @bf4
- Prevent compilation failures if prefix is an empty string - @voxik
- `SplineInterpolatePixel` preprocessor check removed - @joshk
- Make error format a string literal - @mtasaka
- Automatically set `ARCHFLAGS` on OS X - @u338steven
- Fixed `rmagick/version` require failure - @u338steven
- Fixed escaping of `%` in `Draw#get_type_metrics` - @mkluczny
- Silence warnings on Ruby 2.2 when comparing Enums - @meanphil
- Multiple test suite improvements - @mockdeep, @bf4
- Ruby source code formatting with RuboCop - @vassilevsky

## RMagick 2.13.4

- Proof of concept for using `pkg-config` in place of `Magick-config` on debian based systems (#129) - @theschoolmaster
- Changed `Image#resample` to calling `ResampleImage` (#127, related #29, #45) - @u338steven
- Fixed #122: `lib/RMagick.rb` is overwritten by `lib/rmagick.rb` on case-insensitive systems (#124) - @u338steven
- New class `SolidFill` in order to fill image with monochromatic background (#123) - @prijutme4ty
- Quotes for correct path of font file (#121) - @markotom
- Allow `MagickCore6` from `Magick-config` (#120) - @chulkilee
- Fixed: build error with ImageMagick 6.8.9 (when deprecated functions are excluded) (#112) - @u338steven
- Fixed: related x_resolution, y_resolution (#102) - @u338steven
- Lots of test fixes - @u338steven
- Fix pixel hash test (#95) - @ioquatix
- Fixed: build error on Windows Ruby x64 (with ImageMagick 6.8.0-10 / ImageMagick 6.8.7-7) (#94) - @u338steven

## RMagick 2.13.3

- Fix installation error on systems with HRDI enabled RMagick (#90) - @bricef

## RMagick 2.13.2

- Fixed issues preventing RMagick from working with version 6.8 or higher
- Fixed issues preventing RMagick from working with ruby 1.9.3

## RMagick 2.13.1

- Fixed bug preventing RMagick from working with version 6.5.9 or higher

## RMagick 2.13.0

- Added Doxygen documentation, for automatic documentation
- Fixed bug #27467, get RMagick to compile witH ImageMagick 6.5.7
- Fixed bug #27607, switch `Pixel#from_hsla` and `Pixel#to_hsla` to use ranges
  0-255 instead of 0-100 for saturation and lightness (range used by
  ImageMagick 6.5.6-5 and higher). Also added ability to specify all
  arguments to these functions as percentages (bug report by Arthur Chan).


## RMagick 2.12.2

- Add feature tests for `SinusoidFunction` and `PolynomialFunction` enum
  values to allow compiling with ImageMagick 6.4.8-7 (bug report by Mark
  Richman)

## RMagick 2.12.1

- Fix bug #27239, allow 2.12.0 to compile with older releases of ImageMagick
  (bug report by Sam Lown)

## RMagick 2.12.0

- Added `Image#function_channel` (available in ImageMagick 6.4.8-8)
- Added `Image#auto_level_channel`, `Image#auto_gamma_channel` (available in
  ImageMagick 6.5.5-1)
- Added `Draw#interline_spacing`, `#interline_spacing=` (available in
  ImageMagick 6.5.5-8)

## RMagick 2.11.1

- Applied Alexey Borzenkov's mingw patches to `extconf.rb`.
- Fixed a bug in `Magick.trace_proc` that could cause a segv at program exit
  with Ruby 1.9.1 (bug report by Larry Young)
- Added new `CompressionType` enum values `ZipSCompression`, `PixCompression`,
  `Pxr24Compression`, `B44Compression`, `B44ACompression` (available in
  ImageMagick 6.5.5-4)

## RMagick 2.11.0

- Fix bug #26475, dissolve and watermark don't work with new versions of
  ImageMagick (reported by Jim Crate)
- Add `Image#composite_mathematics` (available in ImageMagick 6.5.4-3)
- Add new `LinearDodgeCompositeOp`, `LinearBurnCompositeOp`,
  `PegtopCompositeOp`, `PinLightCompositeOp`, `VividLightCompositeOp` enum values
  (available in ImageMagick 6.5.4-3)

## RMagick 2.10.0

- ImageMagick releases earlier than 6.3.5-10 and Ruby releases earlier
  than 1.8.5 no longer supported.
- (Experimental) Support the use of Ruby managed memory for all memory
  allocations (available in ImageMagick 6.5.3-10)
- Add `Image#selective_blur_channel` (available in ImageMagick 6.5.0-3)
- Add new `AlphaBackgroundChannel` enum value (available in ImageMagick
  6.5.2-5)
- Add new `DistortCompositeOp` enum value (available in ImageMagick 6.5.3-7)

## RMagick 2.9.2

- Add new `HorizontalTileEdgeVirtualPixelMethod`,
  `VerticalTileEdgeVirtualPixelMethod`, `CheckerTileVirtualPixelMethod`
  `VirtualPixelMethod` enum values (available in ImageMagick 6.5.0-1)
- Added `BilinearForwardDistortion`, `BilinearReverseDistortion` enums
  (available in ImageMagick 6.5.1-2)
- Add missing composite operators to `Magick::Draw#composite` method
- Add warning about dropping support for ImageMagick < 6.3.5 and
  Ruby < 1.8.5
- Fix bug #25892, stack buffer overflow in `Magick::TypeMetric.to_s`
  (reported by Roman Simecek)

## RMagick 2.9.1

- Fix a bug that prevents the use of transparent background colors when
  built with ImageMagick 6.4.9-0

## RMagick 2.9.0

- Fix #23209, improve RVG's letter spacing (patch from Jonah Fox)
- Add `Draw#kerning=` attribute (available in ImageMagick 6.4.7-8)
- Add `Draw#interword_spacing=` attribute (available in ImageMagick
  6.4.8-0)
- Add `Draw#kerning`, `Draw#interword_spacing` primitive methods (available in
  ImageMagick 6.4.8-3)
- Feature #23171, support `ImageList`, `Draw`, `Pixel` marshaling.
- Support all the new `EvaluateOperator` constants

## RMagick 2.8.0

- Add the `endian`, `scene`, and `transparent_color` attributes to `Image::Info`
- Deprecate `Image#endian=` attribute setter
- Add the `transparent_chroma` method to the `Image` class (available in
  ImageMagick 6.4.5-6)
- Add the `sparse_color` method to the `Image` class (available in ImageMagick
  6.4.3)
- Update `Image#change_geometry` to work with the new `ParseSizeGeometry` API
  in ImageMagick 6.4.6-9.

## RMagick 2.7.2

- Fix bug #22740, some `Image::Info` attribute values are not propogated to
  the image object (bug report by Thomas Watson)

## RMagick 2.7.1

- Fix bug #22471, `Magick::fonts` can abend on 64-bit systems (bug report and
  patch by James Le Cuirot)
- `ImageList.new` accepts a block which is passed on to `Image::read` when
  reading the input  images. The block is executed in the context of an
  `Image::Info` object.
- Add support for the "user" image property.
- Define the `Magick::FatalImageMagickError` exception class, raised if
  ImageMagick raises a fatal (unrecoverable) exception.
- Added feature #22618, `Image#total_ink_density` (request by F. Behrens)

## RMagick 2.7.0

- Fix bug #22152, `extconf.rb` does not respect the `LDFLAGS` environment
  variable (bug report by Joseph Sokol-Margolis)
- Fix bug #22190, the `NoDitherMethod` enum value is not defined in
  ImageMagick 6.4.2
- Add the `TrimBoundsLayer` `ImageLayerMethod` enum value (available in
  ImageMagick 6.4.3-8)
- Add the `CopyAlphaChannel`, `ExtractAlphaChannel`, `OpaqueAlphaChannel`,
  `ShapeAlphaChannel`, and `TransparentAlphaChannel` `AlphaChannelType` enum
  values (available in ImageMagick 6.4.3-7)
- Rename `Image#affinity` and `ImageList#affinity` to `Image#remap` and
  `ImageList#remap`. Retain the old names as aliases. (Changed in ImageMagick
  6.4.4-0)

## RMagick 2.6.0

- Fix bug #21237, `Image::write` ignores format attribute when called with a
  `Tempfile` pathname (bug report by Jack Shedd)
- Fix bug #21897, `ImageList#from_blob` abends when certain corrupt JPEG
  images are used (bug report by Peter Szabo)
- Add `Image#composite_tiled`, `Image#composite_tiled!` (ref:
  http://rubyforge.org/forum/forum.php?thread_id=27347&forum_id=33)
- Add `Image#deskew` (available with ImageMagick 6.4.2-5)
- Add `Image#define`, `Image#undefine` (available in ImageMagick 6.3.6)
- Add `Image#level_colors` (available in ImageMagick 6.4.2-1)
- Add `Image#levelize_channel` (available in ImageMagick 6.4.2-1)
- Add `Image#affinity`, `ImageList#affinity` (available in ImageMagick 6.4.3-6).
  These methods replace `Image#map` and `ImageList#map`.
- Accept `DitherMethod` values for the `dither` argument to `Image#quantize`,
  `ImageList#quantize`
- Add the `BarrelDistortion`, `PolynomialDistortion`, `ShepardsDistortion`,
  `PolarDistortion`, and `DePolarDistortion` `MagickDistortion` Method enum values
  (available in ImageMagick 6.4.2-6)
- Add the `HorizontalTileVirtualPixelMethod` and
  `VerticalTileVirtualPixelMethod` `VirtualPixelMethod` enum values
  (available in ImageMagick 6.4.2-6)
- Add `DitherMethod` enum class
- Added general-purpose `OptionalMethodArguments` class to handle ad-hoc
  optional arguments.
- Support optional "distort:viewport" and "distort:scale" arguments to
  `Image#distort`
- Support optional `highlight_color` and `lowlight_color` arguments
  to `Image#compare_channel`

## RMagick 2.5.2

- Add support for `MergeLayer` to `Magick::ImageList#optimize_layers` (patch
  #21189, submitted by Andrew Watson)
- Add `PowQuantumOperator` argument for `Image#quantum_operator` (available
  in ImageMagick 6.4.1-9)

## RMagick 2.5.1

- Update `Pixel#to_color` to work with the new `QueryMagickColorname` API in
  ImageMagick 6.4.1-9.

## RMagick 2.5.0

- Added `Image#add_compose_mask`, `#delete_compose_mask` (feature #20531)

## RMagick 2.4.0

- Added `Image#image_type=` (feature #20490)

## RMagick 2.3.0

- Added `Image#encipher`, `Image#decipher` (available with ImageMagick 6.3.8-6)
- Added `DXT1Compression`, `DXT3Compression`, and `DXT5Compression`
  `CompressionType` enums (available in ImageMagick 6.3.9-4)
- Added optional "use hex format" argument to `Pixel#to_color`
- Support `:area` resource type in `Magick.limit_resource`
- `Pixel.from_HSL` and `Pixel#to_HSL` are deprecated. Use `Pixel.from_hsla`
  and `Pixel#to_hsla` instead. The new methods rely on the ImageMagick 6.3.5
  and later API.
- The `Image#alpha` and `alpha=` attributes are deprecated. Use `alpha()` and
  `alpha?` instead.
- The `Image#mask=` attribute is deprecated. Use `mask()` instead.
- The use of Ruby older than version 1.8.4 with RMagick is deprecated and
  will not be supported in a future release.
- Fix bug #18271, rvg width and height attributes wrong after a call to
  viewbox (reported by Greg Jarman)

## RMagick 2.2.2

- Fix bug #18016, add test for `InitializeMagick` in `libMagickCore` to
  `extconf.rb`

## RMagick 2.2.0

- Added `Image#opaque_channel`, `Image#paint_transparent` (available with
  ImageMagick 6.3.7-10)
- Added `Image#liquid_rescale` (available with ImageMagick 6.3.8-2)
- Added `CMYColorspace` `ColorspaceType` value
- Fixed bug #17148, compiler error message on Solaris (bug report by Trever
  Wennblom)
- Fixed bug #17470, `get_exif_by_number`, `get_exif_by_entry` may fail when
  called with one or more arguments

## RMagick 2.1.0

- Added `Image::Info#caption=` attribute
- Rename `Image#crop_resized`, `#crop_resized!` to `#resize_to_fill`,
  `#resize_to_fill!`. Add aliases for the old names.
- Fix bug #16776, in the `axes.rb` example the last 2 arguments to
  `border.rectangle` are swapped (bug report by Alain Feler)
- Fix bug #16931, apostrophe in #error directive causes error in some
  versions of GCC (bug report by Justin Dossey)

## RMagick 2.0.0

- Replaced `configure`/`make`/`make install` with standard Ruby `setup.rb`,
  `extconf.rb`
- Removed support for Ruby earlier than 1.8.2
- Removed support for GraphicsMagick. As a result these methods are no
  longer available: `Image#grayscale_pseudo_class`, `Image#statistics`.
- Removed support for all releases of ImageMagick earlier than 6.3.0.
- Removed deprecated `Image#random_channel_threshold`. Use
  `Image#random_threshold_channel` instead
- Removed deprecated `Image#channel_threshold`. Use
  `Image#random_threshold_channel` instead
- Removed unecessary `Image#montage=`
- Removed unecessary and undocumented `Image#image_type=`
- Removed deprecated `Image::Info#tile_info`, `tile_info=` attributes.
- Removed deprecated `Image::Info#tile`, `tile=` attributes. Use `#extract`,
  `#extract=` instead
- Removed deprecated `Image::Info#subimage`, `subimage=` attributes. Use
  `scene`, `scene=` instead
- Removed deprecated `Image::Info#subrange`, `subrange=` attributes. Use
  `number_scenes`, `number_scenes=` instead
- Removed deprecated `Magick.set_monitor`. Use `Image#set_monitor`,
  `Image::Info#set_monitor` instead
- Removed deprecated `RunlengthEncodedCompression` `CompressionType`. Use
  `RLECompression` instead
- Deprecated `Image#matte`, `matte=` with ImageMagick 6.3.5 and later
- Added `Image::Info#stroke=`, `stroke_width=` and `undercolor=` attributes
- Added `Image::Info#tile_offset=` attribute
- Added `Draw#fill_pattern=` and `#stroke_pattern=` annotate attributes
- Changed `Image::Info[]` and `Image::Info[]=` to allow an omitted "format"
  argument
- Added `Image#destroy!`, `destroyed?`, `check_destroyed` methods
- Support `Image` object creation/destruction tracing with the
  `Magick.trace_proc` attribute
- Added `Magick::QuantumRange`. `Magick::MaxRGB` is deprecated.
- Added `OptimizeTransLayer`, `RemoveDupsLayer`, `RemoveZeroLayer`,
  `OptimizeImageLayer` `ImageLayerMethods` enum values (available with
  ImageMagick 6.3.3),
  `MosaicLayer`, `FlattenLayer` (available with ImageMagick 6.3.6)
- RMagick works with Q32 version of ImageMagick
- Added `ChangeMaskCompositeOp`, `DivideCompositeOp`, `LinearLightCompositeOp`
  `CompositeOperator` enum values
- Added `SplineInterpolatePixel` `InterpolatePixelMethod` enum value
- Added `DitherVirtualPixelMethod`, `RandomVirtualPixelMethod`,
  `BlackVirtualPixelMethod`, `GrayVirtualPixelMethod`, `WhiteVirtualPixelMethod`
  (available with ImageMagick 6.3.5), and `MaskVirtualPixelMethod` (available
  with ImageMagick 6.3.3) `VirtualPixelMethod` enum values
- Added `GIFInterlace`, `JPEGInterlace`, `PNGInterlace` `Interlace` type enum
  values (available with ImageMagick 6.3.4)
- Added `SentinelFilter` `FilterTypes` enum value (available in ImageMagick
  6.3.6)
- Added `Image.combine`
- Added `Image#separate` (available with ImageMagick 6.3.2)
- Added `Image#distort` (available with ImageMagick 6.3.5)
- Added `Image#each_pixel` (thanks to Russell Norris for the suggestion and
  code)
- Added `Image#histogram?` (available with ImageMagick 6.3.5)
- Added `Image#sync_profiles`  (available with ImageMagick 6.3.2)
- Added `Image#extent` (available with ImageMagick 6.3.1)
- Added `Image#excerpt`, `Image#excerpt!` (available with ImageMagick 6.3.5)
- Added `Image::Info#attenuate`
- Added `Image#clut_channel` (available with ImageMagick 6.3.5)
- Feature Request #16264, added `ImageList#composite_layers` (available with
  ImageMagick 6.3.3, request from Steve Martocci)
- Added `Image#alpha=` (available with ImageMagick 6.3.5)
- Added `Image#gravity=`
- Added `Image#equalize_channel` (available with ImageMagick 6.3.6)
- Added new `FilterTypes` values `KaiserFilter`, `WelshFilter`, `ParzenFilter`,
  `LagrangeFilter`, `BohmanFilter`, `BartlettFilter` (available with ImageMagick
  6.3.6)
- Fix bug #10339, `Image#trim` does not support "reset page information
  option" (bug report from Nobody)
- Renamed `RMagick.so` to `RMagick2.so` to prevent confusion between `RMagick.rb`
  and `RMagick.so`
- Feature Request #16276, re-organize doc to not split `Image` method pages
  in the middle of an initial letter (request from Roy Leban)
- Updated for ImageMagick 6.3.7-5
- Made changes as necessary to work with current Ruby 1.9.0

## RMagick 1.15.12

- Fix bug #16221, starting with ImageMagick 6.3.2, get_exif_by_entry/number
  returns empty array/hash when no arguments are specified, even though the
  image has EXIF data (bug report from Paul Clegg)

## RMagick 1.15.11

- Fix bug #15887, the x_ and y_resolution attributes don't respect the units
  attribute (bug report from Ben Greenburg)
- Fix bug #15889, memory leak in Draw#composite method (bug report from Till
  Vollmer)

## RMagick 1.15.10

- Update Magick::Pixel.from_HSL, #to_HSL to work with new APIs in
  ImageMagick 6.3.5-9.

## RMagick 1.15.9

- Fixed bug #12089 (bug report from Hans de Graaff)

## RMagick 1.15.8

- Fixed bug #12671, incorrect link in HTML doc (bug report from Thomas R.
  Koll
- Fixed bug #11890, incorrect usage description for Draw#text_undercolor in
  HTML doc (bug report from Ezra Freedman)
- Fixed bug #12706, specifying both a gravity and offsets to Image#composite
  positions the composite image incorrectly (bug report from Benoit Larroque)

## RMagick 1.15.7

- Fix bug #11033, make distclean misses some files (bug report from Lucas
  Nussbaum)
- Work around SetMagickRegistry problem in ImageMagick 6.3.4-7

## RMagick 1.15.6

- Fix bug #10070, memory leak in Draw#get_type_metrics,
  Draw#get_multiline_type_metrics, Draw#annotate (bug report from Sinclair
  Bain)
- Fix bug #10080, scripts in examples directory should not be marked
  executable (bug report from Lucas Nussbaum)

## RMagick 1.15.5

- Fix bug #9637, export_pixels always exports all 0's for 1-bit images (bug
  report from Doug Patterson)

## RMagick 1.15.4

- Fix bug #8927, RMagick and rbgsl both export the name ID_call (bug report
  from Shin Enomoto)

## RMagick 1.15.3

- Fix bug #8697, Image::Info.fill= doesn't work when creating "caption:"
  format images (bug report from choonkeat)

## RMagick 1.15.2

- Fix bug #8408, a compatibility problem with some versions of ImageMagick
  before 6.2.5 (bug report from Geir Gluckstad)

## RMagick 1.15.1

- Fix bug #8307, compatibility problems with older (6.0.x) versions of
  ImageMagick (bug report from Chris Taggart)

## RMagick 1.15.0

- Added fx method to ImageList class
- Added wet_floor method to the Image class
- Added linear_stretch method to the Image class (available with
  ImageMagick 6.3.1-1)
- Added recolor method to the Image class (available with ImageMagick 6.3.1-3)
- Added polaroid method to the Image class (available with ImageMagick 6.3.1-6)
- Added origin attribute to the Image::Info class (supported by
  ImageMagick 6.3.1-4 and later)
- Added PaletteBilevelMatteType to the ImageType enum
- Fix bug #6260, some RVG examples produce all-black GIF images
- Fix bug #7034, fix the matte method in the Draw class
- Fix bug #7373, default channels should be RGB instead of RGBA
- Fix bug #7716, Pixel#intensity wrong for gray images (bug report from
  Morio Miki)
- Fix bug #7949, Magick::Draw.new abends when an exception occurs before
  the draw object is fully initialized (bug report from Andrew Kaspick)
- Fix bug #8015, Magick::Draw.new doesn't call the optional arguments block
  in the right scope (bug report from Andrew Kaspick)
- Tested with ImageMagick 6.3.2-0

## RMagick 1.14.1

- Handle change to the type of the ColorInfo.color field introduced by
  ImageMagick 6.3.0

## RMagick 1.14.0

- Feature request #5015, support CMYK->RGB conversions. Added the
  add_profile and delete_profiles to the Image class. Fixed the profile!,
  iptc_profile, and color_profile methods. Added the
  black_point_compensation attribute. (requested by Niklas Ekman)
- Added adaptive_blur, adaptive_blur_channel, find_similar_region, sketch
  methods to the Image class (available with ImageMagick 6.2.8-6)
- Added adaptive_resize to the Image class (available with
  ImageMagick 6.2.9)
- Added resample method to the Image class (thanks to Ant Peacocke for the
  idea)
- Added four new compositing methods to the Image class: blend, displace,
  dissolve, and watermark
- Feature request #5418, add get_iptc_dataset and each_iptc_dataset to the
  Image class (requested by Oliver Andrich)
- Added the bias and mask attributes to the Image class
- Added optional qualifier argument to Image#rotate
- Patch #5742 from Douglas Sellers, adds channel method to the Image::Info
  class.
- Added new ChannelType enum values
- Added texture= attribute writer to the Image::Info class
- Added tile= attribute writer to the Draw class
- Added  pixel_interpolation_method attribute, InterpolatePixelMethod enum
  class to the Image class (available with ImageMagick 6.2.9)
- Added "Magick Command Options and Their Equivalent Methods" page to the
  documentation
- Fix bug #5079, Image#quantum_operator method doesn't work (bug report
  from Pedro Martins)
- Fix bug #5080, incorrect RVG images when non-0 values used for the min_x
  or min_y arguments to RVG#viewbox (bug report from Daniel Harple)
- Fix bug #5370, the clip_mask= attribute doesn't work
- Fix bug #5506, wrong argument used to intialize AffineMatrix (bug
  report from Michael Shantzis)

## RMagick 1.13.0

- Added transform, transform!, transpose, transpose! methods to Image class
  (available with ImageMagick 6.2.8)
- Feature #4844, add auto_orient, auto_orient! methods to Image class
  (suggestion from John Oordopjes, available with ImageMagick 6.2.8)
- Added adaptive_sharpen, adaptive_sharpen_channel methods to Image class
  (available with ImageMagick 6.2.7)
- Added composite_image_channel, composite_image_channel! methods to Image
  class (added in ImageMagick 6.2.6)
- Added radial_blur_channel method to Image class (available in
  ImageMagick 6.2.4)
- Fix bug #4806, add hash, eql? methods to Pixel class (bug report from
  Tim Pease)
- Change extension filename to match RubyGems 0.9.0 expectations.
- Fix bug #4821, correct doc for Image#rotate (bug report from Tim Pease)
- Update the Draw#annotate documentation

## RMagick 1.12.0

- Fix bug #4630, the new signature for #level is incompatible with
  releases prior to 1.10.1 (bug report from Al Evans)

## RMagick 1.11.1

- Fix bug #4511, add Makefile, rmagick_config.h as dependencies
  in the Makefile (bug report from Eric Hodel)
- Ensure ExceptionInfo structures are freed

## RMagick 1.11.0

- Feature #3705, add resize_to_fit (thanks to Robert Manni for the code)
- Added optimize_layers method to the ImageList class (available with
  ImageMagick 6.2.6)
- Added limit_resource method to the Magick module
- Replaced install.rb with setup.rb, improved gem install
  (bug report from Ryan Davis)
- Added --disable-htmldoc option to setup.rb
- Fix bug #4104, incorrect label on example (reported by Jason Lee)
- Added contrast_stretch_channel to the Image class (available with
  ImageMagick 6.2.6)
- Improved Magick exception handling to eliminate memory leaks when an exception
  is rescued and execution continues.
- Tested with ImageMagick 6.2.7

## RMagick 1.10.1

- Fix bug #3437, memory leak in ImageList#to_blob
- Fix bug #3363, Image#composite doesn't work when the source image
  is bigger than the destination
- Fix bug #3635, Image#import_pixels doesn't accept FloatPixel or DoublePixel
  storage types
- Feature #3597, add border_color attribute to the Draw class

## RMagick 1.10.0

- Added add_noise_channel method to Image class (available with ImageMagick 6.2.5)
- Added vignette method to the Image class (available with ImageMagick 6.2.6)
- Added crop_resize method to the Image class (thanks to Jerret Taylor for
  the suggestion and original code)
- Added export_pixels_to_str method to the Image class
- Provided default arguments to Image#export_pixels
- Added "order" option to Image#ordered_dither
- Added cyan, magenta, yellow, and black attribute accessors to the Pixel class
- Added CineonLogRGBColorspace, LABColorspace, Rec601LumaColorspace,
  Rec601YCbCrColorspace, Rec709LumaColorspace, Rec709YCbCrColorspace,
  LogColorspace enumerators to the ColorspaceType enumeration class.
- Fixed bug #2844, Image#to_blob exits if the image is a 0x0 JPEG
- Fixed bug #2688, Image#annotate, Draw#get_multiline_type_metrics handle
  newline characters properly
- Tested with ImageMagick 6.2.6
- Removed support for all versions of ImageMagick prior to 6.0.0

## RMagick 1.9.3

- Feature #2521, add Image#distortion_channel method
- Fixed bug #2546, ImageList#to_blob builds multi-image blobs again. (ImageMagick 6.2.0
  silently broke the ImageToBlob method.) Thanks to Tom Werner for reporting this bug.
- Test with GraphicsMagick 1.1.7

## RMagick 1.9.2

- Feature #2412, add the virtual_pixel_method attribute and the VirtualPixelMethod
  enumeration
- Feature #2462, add the ticks_per_second attribute

## RMagick 1.9.1

- Fixed bug #2157, Image#total_colors is now an alias of Image#number_colors
- Fixed bug #2155, Image#dispose= now accepts a DisposeType enum, #dispose
  now returns a DisposeType enum.
- Fixed bug #2156, Image#properties no longer returns garbage for the property
  name and value.
- Fixed bug #2190, Image#compose now returns a CompositeOperator
- Fixed bug #2191, Image#composite no longer abends when called with 0 arguments
- Fixed bug #2213, ImageList#montage method no longer leaves the imagelist corrupt
  after raising an ImageMagickError
- Feature #2159, added GrayChannel ChannelType enum value, BlendCompositeOp and
  ColorBurnCompositeOp CompositeOperator enum values, RLECompression CompressionType
  enum value, deprecate RunlengthCompression
- Feature #2172, added optional argument to crop and crop! to reset the saved
  page offsets after cropping
- Deprecated Image#channel_threshold. This method is deprecated in ImageMagick.
- Feature #2373, change Image#import_pixels to accept a pixel data buffer as well
  as a pixel data array. (Thanks to Ara T. Howard for this suggestion!)
- Fixed to compile without errors with ImageMagick 6.2.4-4.

## RMagick 1.9.0

- Added Image#monitor=, Image::Info#monitor=. Deprecated Magick.set_monitor.
- Fixed bug #2070, support color names with embedded spaces
- Fixed bug #2109, properly scope Magick constants in RVG

## RMagick 1.8.3

- Tested with ImageMagick 6.2.3-2
- Added comment, delay, dispose, fill, gravity, and label attributes to
  Image::Info

## RMagick 1.8.2

- Fix bug #1983, potential buffer overflow in version_constants
- Added feature #2015, support the pointsize, authenticate,
  and sampling_factor attributes in Image::Info

## RMagick 1.8.1

- Fix bugs #1876, #1888, #1919
- Added feature #1941, RVG's polyline, polygon accept array arguments
- Numerous fixes to the RVG documentation

## RMagick 1.8.0

- Added Image#shadow (ImageMagick 6.1.7)
- Added Image::Info#undefine, #[], #[]=
- Added sigmoidal_contrast_channel, sepiatone to Image class (ImageMagick 6.2.1)
- Added JPEG2000Compression constant (ImageMagick 6.2.2)
- Incorporated RVG classes
- Added RVG documentation, examples, updated installer
- Tested with ImageMagick 6.2.2-0, latest GraphicsMagick 1.2

## RMagick 1.7.4

- Fix bug #1727
- Fix affine_transform.rb
- Tested with ImageMagick 6.2.1

## RMagick 1.7.3

- Fix bug #1553, a build issue with ImageMagick 6.0.x

## RMagick 1.7.2

- Fix bugs #1308, #1310, #1314, #1533

## RMagick 1.7.1

- Fix bugs #1250, #1253
- Tested with ImageMagick 6.1.7, Ruby 1.8.2

## RMagick 1.7.0

- Added splice, set_channel_depth to Image class (ImageMagick 6.0.0)
- Added sharpen_channel, blur_channel to Image class (ImageMagick 6.0.1)
- Added get_multiline_type_metrics to Draw class (ImageMagick 6.1.5),
  added new example scripts and images
- Added normalize_channel, unsharp_mask_channel to Image class
  (ImageMagick 6.1.0)
- Added read_inline to Image class
- Renamed channel_compare to compare_channel, retained old name as an alias
  for backward compatibility.
- Added default values for unsharp_mask arguments
- Fixed bug #1193
- Fixed segfault in destroy_Draw when Ruby gc'd the temp file name
  array before calling destroy_Draw
- Tested with ImageMagick 6.1.6, GraphicsMagick 1.1.4, Ruby 1.8.2preview3.

## RMagick 1.6.2

- Fixed ImageList#deconstruct to return an imagelist
- Fixed installation procedure to propagate user's CFLAGS, CPPFLAGS,
  and LDFLAGS through to the low-level Makefile
- Fixed bugs #1048, #1127

## RMagick 1.6.1

- Changed to match changes in ImageMagick 6.1.4 API
- Fixed bug #950

## RMagick 1.6.0

- Added posterize, gaussian_blur_channel, convolve_channel methods to Image class
  (ImageMagick 6.0.0)
- Added new CompositeOperator constants (ImageMagick 6.0.0)
- Added trim and trim! methods to Image class
- Added each method to Enum subclasses
- Added stroke_width= attribute to the Draw class
- Fixed bugs #624, #642, #716, applied patch #819 (thanks to Daniel Quimper)
- Tested with ImageMagick 6.0.5-2, GraphicsMagick 1.1.3, Ruby 1.8.2

## RMagick 1.5.0

- Added meaningful implementations of dup and clone to the Image and Draw
  classes. Clarified the documentation.
- Do not allow changes to frozen Image, ImageList, and Draw objects.
- Raise TypeError if freeze method sent to Image::Info or ImageList::Montage
  object.
- Added view method to Image, Image::View class (thanks to Ara T. Howard and
  Charles Comstock on c.l.r for the discussion which prompted me to add this class)
- Added grayscale_pseudo_class method to Image class (GraphicsMagick 1.1)
- Added radial_blur, random_threshold_channel methods to Image class
  (ImageMagick 6.0.0)
- Added quantum_operator method to Image class (GraphicsMagick 1.1, ImageMagick 6.0.0)
- Added statistics method to Image class (GraphicsMagick 1.1)
- Support channel_extrema, channel_mean with GraphicsMagick 1.1
- Added endian attribute to Image class
- Added composite! method to Image class
- Deprecated random_channel_threshold method when linked with ImageMagick 6.0.0.

## RMagick 1.4.0

- Revised and updated documentation
- Implemented enumeration values as instances of an Enum
  class. Based on a description by Paul Brannon in ruby-talk 79041.
- Added HSLColorspace, HWBColorspace constants (ImageMagick 5.5.7,
  GraphicsMagick 1.0.2)
- Added CopyCyanCompositeOp, CopyMagentaCompositeOp,
  CopyYellowCompositeOp, CopyBlackCompositeOp constants (ImageMagick 5.5.7,
  GraphicsMagick 1.1)
- Added ReplaceCompositeOp. CopyCompositeOp constants (ImageMagick 6.0.0)
- Added color_histogram to Image class. (ImageMagick 6.0.0, GraphicsMagick 1.1)
- Added define method to Image::Info class (ImageMagick 6.0.0, GraphicsMagick 1.1)
- Added tint, each_profile, channel_extrema, channel_compare,
  channel_depth, channel_mean, quantum_depth, preview, gamma_channel,
  negate_channel, bilevel_channel methods to Image class (ImageMagick 6.0.0)
- Added get_exif_by_entry, get_exif_by_tag to Image class
- Added border! method to Image class
- Added fcmp, intensity methods to Pixel class
- Added Version_long constant
- The 'fuzz' attribute in the Image and ImageInfo classes now
  accepts a percentage value as well as a numeric value.
- Added Geometry class and changed all methods that accept a geometry
  string to accept a Geometry object as well
- Added dup and clone methods to the ImageList, Image, and Draw
  classes (Fix for bug #254.)
- Tested with latest ImageMagick 6.0.0 beta and GraphicsMagick 1.1 snapshot

## RMagick 1.3.2

- Fix profile! to require only 2 arguments, as documented.
- Correct spelling of 'transparent' in text_antialias.rb example.
- Add output of `Magick-config --libs` to LIBS variable in configure
- Minor fixes in documentation
- Test with GraphicsMagick 1.0.4
- Test with latest ImageMagick 5.5.8 beta

## RMagick 1.3.1

- Fixed default base URI in the links to the installed xMagick doc
- Applied the patch for bug #76 that caused the rubyname.rb example
  to hang when installing on FreeBSD.
- Fixed the <=> method in Image to return nil when the class of the
  other object is not Image
- Added code to ensure that the `text' argument to Draw#text is not
  nil or empty
- Fixed the handle_error function to re-initialize the exception
  structure after destroying its contents.

## RMagick 1.3.0

- Added strip!, import_pixels, export_pixels, random_channel_threshold
  to the Image class. (Available only with ImageMagick 5.5.8, which
  is still in beta.)
- Added black_threshold and white_threshold to the Image class.
- Added format= attribute writer to the Image class
- Added monochrome= attribute writer to the Image::Info class
- Added annotate to the Image class.
- Made the image argument to get_type_metrics optional. (Thanks to
  Hal Fulton for suggesting this change and the annotate change!)
- Enhance the read, write, and ping methods in both the Image
  class and the ImageList class to accept an open File object as
  well as a filename argument.
- Added change_geometry to the Image class
- Changed configure to generate top-level Makefile with install
  and uninstall targets. (Thanks to Bob Friesenhahn for the
  suggestion and the the Makefile!)
- Incorporated 1.2.2.1 patch to correct problems when building
  with Ruby 1.6.7.
- Added "magick_location" attribute to the ImageMagickError
  class. (Available only with GraphicsMagick 1.1, not yet released.)
- Tested with ImageMagick 5.5.8 beta
- Tested with GraphicsMagick 1.0.2 and 1.1 snapshot
- Tested with Ruby 1.8.0
- Changed to MIT license

## RMagick 1.2.2

- Fixed many bugs in configuration script
- Added support for GraphicsMagick 1.0 (with assistance from Bob Friesenhahn)
- Changed default documentation directory (--doc-dir option default) to
  $prefix/share/RMagick
- Added "examples" directory to contain example programs that aren't
  referenced by the documentation

## RMagick 1.2.1

- Yet another fix to the Cygwin installation procedure

## RMagick 1.2.0

- Changed install to work correctly on Cygwin
  (Cygwin testing by Yuki Hirakawa and David Martinez Garcia.)
- Changed install to support Gentoo ebuild
  (Gentoo support provided by Tom Payne.)
- Changed configure script to find IM doc in IM 5.5.7
- Added Image#capture
- Added optional matte_pct argument to Image#colorize
- Add default argument values to Image#gaussian_blur
- Fix bug in Image#store_pixels that prevented it from working with
  GIF and other PseudoClass image formats
- Changed Image#crop and Image#crop! to accept a GravityType constant
  as the first argument, instead of the x- and y-offset arguments.
  (Suggested by Robert Wagner.)
- Added Image::Info#filename=, image_type=
- Added ImageList#__map__ as an alias for Enumerable#map
- Added fetch, insert, select, reject methods to ImageList class for
  Ruby 1.8.0
- Undefined zip and transpose methods in ImageList class for Ruby 1.8.0
- ImageMagick 5.5.7 supported

## RMagick 1.1.0

- Fixed bug in handle_error that caused an abend when linked with IM 5.5.6
- Added RMAGICK image "format". When read, returns 252x108 RMagick logo
  in PNG format.
- Changed examples to give all floating point constants a leading digit.
- Added Image#rotate!
- Tested with Ruby 1.8.0preview2
- Added Image#extract_info, Image::Info#extract=, Image::Info#scene=,
  Image::Info#number_scenes=, Image::Info#tile=
- Added Draw#text_align, Draw#text_anchor, Draw#text_undercolor
- ImageMagick 5.5.6 supported

## RMagick 1.0.0

- Fixed warnings when compiling with Ruby 1.8.0
- Added Draw#rotation=, rotated_text.rb
- Fixed temp image files in Montage_texture and Draw_composite
- ImageMagick 5.5.5 supported

## RMagick 0.9.5

- Added channel.rb example
- Fixed install problems with IM 5.5.1

## RMagick 0.9.4

- Cleaned up documentation.
- Added logging methods Magick.set_log_event_mask and Magick.set_log_format
- Added Magick.set_monitor
- Added custom serialization methods _dump and _load to Image class.
  Added marshaling section to usage doc.
- Added Image#mime_type
- Changed install to use autoconf-generated configure script
- Replaced makedoc.rb with post-install.rb hook
- Added rmconst.rb utility script
- ImageMagick 5.5.4 supported

## RMagick 0.9.3

- Changed ImageList#<=> to use same algorithm as Array#<=>
- Changed Draw class variables to class constants
- Fixed bug in Magick::colors method that caused some colors
  to be repeated or missed when the optional block is used
- Changed fill classes to not inherit from common Fill class.
  Removed Fill class.
- Improved usage documentation
- Added Image#level_channel, introduced with IM 5.5.3
- ImageMagick 5.5.3 supported
- Ruby 1.6.8, 1.8.0preview1 supported

## RMagick 0.9.2

- Added crop!, flip!, flop!, magnify!, minify!, resize!, sample!,
  scale!, shave!, channel_threshold methods to Image class
- Documented DisposeType, ColorSeparationMatteType and OptimizeType
  constants
- Changed Image#<=>, ImageList#<=> to raise TypeError if the other
  argument is not in the same class
- Deleted Image#==, ImageList#==, include Comparable in both classes
- Added Image#thumbnail, thumbnail!, adaptive_threshold for 5.5.2 & later
- Used image list functions in 5.5.2 & later
- ImageMagick 5.5.2 supported
- Removed last vestiges of 5.4.9 support

## RMagick 0.9.1

- Added -Wl,rpath option to $LDFLAGS in extconf.rb
- #include <sys/types.h> in rmagick.h
- Changed set_cache_threshold to call SetMagickResourceLimit instead of SetCacheThreshold
- Changed Image_texture_flood_fill to clone texture image instead of adding a reference
- Many fixes to the Array methods in ImageList
- Defined Image#<=>, defined Image#== in terms of Image#<=>
- Defined ImageList#<=> in terms of Image#<=>

## RMagick 0.9.0

1st beta
