= Changelog

The file documents the changes to this library over the different versions.

- ChunkyPNG uses semantic versioning. This means that the public API will not change except for major versions.
- Please add an entry to the "Unreleased changes" section in your pull requests, so I can move them into a numbered version section on release.

=== Unreleased changes

- Implemented <tt>ChunkyPNG::Dimension#hash</tt> to fix some specs after a behavior change in RSpec.

=== 1.3.11 - 2018-11-21

- Updated project metadata as published on Rubygems.org

=== 1.3.10 - 2018-01-23

- Fixed a regression in Datastream#metadata, which was not able to deal with iTXt chunks.

=== 1.3.9 - 2018-01-23

- Add support for reading and writing an international textual data (iTXt chunks).

=== 1.3.8 - 2016-08-31

- Add support for reading and writing an image's physical dimension (pHYs chunks).

=== 1.3.7 - 2016-08-31

- Performance improvement for <tt>Color.euclidean_distance_rgba</tt>.
- Bugfix in decoding transparent pixels when decoding multiple images in a row.

=== 1.3.6 - 2016-06-19

- Allow reading images from streams that have trailing data after the IEND chunk.
- Add compatibility for Ruby 2.3's frozen string literals.
- Documentation updates and small cleanups.

=== 1.3.5 - 2015-10-28

- Performance improvements for <tt>Canvas#crop!</tt> and <tt>ImageData.combine_chunks</tt>
- Update <tt>chunky_png/rmagick</tt> to work with the latest versions of RMagick.
- Bugfix in <tt>Color#from_hsl</tt> and <tt>Color#from_hsv</tt> when hue value is 360.
- Fix encoding issue in <tt>Datastream#to_blob</tt>

=== 1.3.4 - 2015-02-16

- Assert compatibility with Ruby 2.2
- Improved documentation using RDoc, so it is included on https://www.rubydoc.info/gems/chunky_png
- Update chunkypng.com website; migrate some stuff from the wiki.

=== 1.3.3 - 2014-10-24

- Improve performance of <tt>Canvas#crop</tt> and <tt>Canvas#crop!</tt> by doing less memory allocations.
- Update to RSPEC 3
- Add CONTRIBUTING.rdoc file.

=== 1.3.2 - 2014-10-18

- Add HSV/HSL color conversions: <tt>Color.from_hsl</tt>, <tt>Color.to_hsl</tt>
- Allow empty IDAT chunks to better conform to the PNG standard.
- Small bugfix in image resampling.
- Documentation and code readability improvements.

=== 1.3.1 - 2014-04-28

- Improve performance of <tt>Palette.from_canvas</tt>.
- Add <tt>Color.euclidean_distance_rgba</tt> to compare colors.
- Bugix in <tt>Canvas.from_bgr_stream</tt>.
- Documentation and code readibility improvements.
- README updates, include mention of screencast.

=== 1.3.0 - 2014-02-10

- Add support for parsing color that use three-hex notation. (e.g. <tt>#aaa</tt> instead of <tt>#aaaaaa</tt>)
- Add <tt>Canvas#border!</tt> and <tt>Canvas#border</tt> to draw a border around a canvas.
- Add <tt>Canvas#trim!</tt> and <tt>Canvas#trim</tt> to trim a border from a canvas.

=== 1.2.9 - 2013-10-17

- Set license in chunky_png.gemspec for better discoverability.
- Improve error messages for <tt>Canvas#crop</tt>.
- Use better gem release management tasks from bundler.

=== 1.2.8 - 2013-03-30

- Ruby 2.0 compatibility.
- Fixed some encoding issues on JRuby.
- Update Travis CI configuration to test on more Ruby versions.

=== 1.2.7 - 2013-01-07

- Small PNG decoding performnace improvements by using bitwise math.

=== 1.2.6 - 2012-08-07

- Add decompression bomb security warning to README.
- Fix RMagick loading issue on case sensitive filesystems.
- Some compatibility fixes for the upcoming Ruby 2.0.
- Allow more data-url notations for <tt>ChunkyPNG::Canvas.from_data_url</tt>.

=== 1.2.5 - 2011-09-23

- Edge case bugfix in <tt>Color.decompose_alpha_component</tt> that could get triggered in the <tt>change_theme_color! </tt> method.

=== 1.2.4 - 2011-09-14

- Added data URL importing <tt>Canvas.from_data_url</tt>.

=== 1.2.3 - 2011-09-14

- Added data URL exporting <tt>Canvas#to_data_url</tt> to easily use PNGs inline in CSS or HTML.

=== 1.2.2 - 2011-09-14

- Workaround for performance bug in REE.

=== 1.2.1 - 2011-08-10

- Added bicubic resampling of images.
- Update resampling code to use integer math instead of floating points.

=== 1.2.0 - 2011-05-08

- Properly read PNG files with a tRNS chunk in color mode 0 (grayscale) or 2 (true color).

=== 1.1.2 - 2011-05-06

- Added <tt>Color.to_grayscale</tt> and <tt>Canvas#grayscale!</tt> to convert colors and canvases to grayscale.
- Memory footprint improvement of <tt>Canvas#resample!</tt>

=== 1.1.1 - 2011-04-22

- Added <tt>Canvas#to_alpha_channel_bytes</tt> and <tt>Canvas#to_grayscale_stream</tt> to export raw pixel data.
- Spec suite cleanup

=== 1.1.0 - 2011-03-19

- Add bezier curve drawing: <tt>Canvas#bezier_curve</tt>.
- RDoc fixes & improvements.

=== 1.0.1 - 2011-03-08

- Performance improvements.

=== 1.0.0 - 2011-03-06

There are some API changes for this release. If you are using <tt>Canvas#compose</tt> or <tt>Canvas#replace</tt>, these methods will no longer operate in place, but will return a new canvas instance instead. The in place versions have been renamed to <tt>compose!</tt> and <tt>replace!</tt> to be more consistent with the rest of the API.

- Added image resampling using the nearest neighbor algorithm: <tt>Canvas#resample</tt>.
- Added circle and polygon drawing methods: <tt>Canvas#circle</tt> and <tt>Canvas#polygon</tt>.
- Added in place version of <tt>Canvas#crop</tt>, <tt>Canvas#rotate_180</tt>, <tt>Canvas#flip_horizontally</tt> and <tt>Canvas#flip_vertically</tt>. Just add a bang to the method name (e.g. <tt>Canvas#crop!</tt>) and it will change the current canvas instead of returning a new one. These implementations are also more memory and CPU efficient.
- Added geometry helper classes: <tt>ChunkyPNG::Point</tt>, <tt>ChunkyPNG::Dimension</tt> and  <tt>ChunkyPNG::Vector</tt>.
- Added a list of HTML named colors. Get them by calling <tt>ChunkyPNG::Color(:teal)</tt> or <tt>ChunkyPNG::Color('red @ 0.8')</tt>
- Added encoding support for 1-, 2-, and 4-bit grayscale images.
- Cleaned up auto-detection of color mode settings. It will now choose 1 bit grayscale mode if an image only contains black and white. (The other low bitrate grayscale modes are never chosen automatically.)
- RDoc improvements. See https://rdoc.info/gems/chunky_png.
- ChunkyPNG is now also tested on Ruby 1.8.6.

=== 0.12.0 - 2010-12-12

- Added support for encoding indexed images with a low bitrate. It will automatically use less bits per pixel if possible.
- Improved testing setup. ChunkyPNG is now tested on Ruby 1.8.7, 1.9.2, JRuby and Rubinius.

=== 0.11.0 - 2010-11-16

- Decoding of 1, 2 and 4 bit indexed color images.
- Decoding of 1, 2 and 4 bit grayscale images.
- Decoding 16 bit images. The extra bits will be discarded, so the image will be loaded as 8 bit.
- Used the official PNG suite to build a more complete test suite.

=== 0.10.5 - 2010-10-21

- Bugfix: allow 256 instead of 255 colors for indexed images.

=== 0.10.4 - 2010-10-17

- Improved handling of binary encoding for strings in Ruby 1.9.

=== 0.10.3 - 2010-10-07

- Small fix to make grayscale use the B byte consistently.

=== 0.10.2 - 2010-10-04

- Another small fix for OilyPNG compatibility

=== 0.10.1 - 2010-10-03

- Small fix for OilyPNG compatibility

=== 0.10.0 - 2010-10-03

- Refactored decoding and encoding to work on binary strings instead of arrays of integers. This gives a nice speedup and uses less memory. Thanks to Yehuda Katz for the idea.

=== 0.9.2 - 2010-09-16

- Fixed an issue with interlaced images.

=== 0.9.1 - 2010-09-15

- Fixed image metadata issue when duplicating images.

=== 0.9.0 - 2010-08-18

- Added <tt>flip_horizontally</tt>, <tt>flip_vertically</tt>, <tt>rotate_left</tt>, <tt>rotate_right</tt> and <tt>rotate_180</tt> to <tt>ChunkyPNG::Canvas</tt>.
- Now raises <tt>ChunkyPNG::OutOfBounds</tt> exceptions when referencing coordinates outside the image bounds.
- Added Gemfile for development dependency management.

=== 0.8.0 - 2010-06-30

- Added <tt>ChunkyPNG::Image#rect</tt> to draw simple rectangles.
- Fixed composing a transparent color on a fully transparent background.

=== 0.7.3 - 2010-04-28

- Based on the suggestion of [Dirkjan Bussink](https://github.com/dbussink), introduced custom exception classes:
  - <tt>ChunkyPNG::SignatureMismatch</tt> is raised when the PNG signature could not be found. Usually this means the the file is not a PNG image.
  - <tt>ChunkyPNG::CRCMismatch</tt> is raised when the a CRC check for a chunk in the PNG file fails.
  - <tt>ChunkyPNG::NotSupported</tt> is raised when the PNG image uses a feature that ChunkyPNG does not support.
  - <tt>ChunkyPNG::ExpectationFailed</tt> is raised when a required expectation failed.

=== 0.7.2 - 2010-04-28 [YANKED]

=== 0.7.1 - 2010-03-23

- Some fixes for 32-bit systems.

=== 0.7.0 - 2010-03-15

- Added <tt>:best_compression</tt> saving routine to allow creating the smallest images possible.
- Added option to control Zlib compression level while saving.

=== 0.6.0 - 2010-02-25

- Added methods to easily create different color variants of an image with a color theme. See [[Images with a color theme]] for more information.

=== 0.5.8 - 2010-02-24

- Ruby 1.8.6 compatibility fixes
- Improved API documentation.

=== 0.5.5 - 2010-02-15

- Added alpha decomposition to extract a color mask from a themed image.
- Improved API documentation.

=== 0.5.4 - 2010-01-17

- Added <tt>point</tt> and <tt>line</tt> anti-aliased drawing functions.

=== 0.5.3 - 2010-01-16

- Removed last occurrences of floating math to speed up the library.
- Added importing of ABGR and BGR streams.
- Added exporting an image as  ABGR stream.

=== 0.5.2 - 2010-01-15

- Ruby 1.9 compatibility fixes.
- Improved speed of PNG decoding.
- Bugfix in *average* scanline decoding filter.

=== 0.5.1 - 2010-01-15

- Added <tt>:fast_rgba</tt> and <tt>:fast_rgb</tt> saving routines, which yield a 1500% speedup when saving an image.

=== 0.5.0 - 2010-01-15

- Complete rewrite of the earlier versions, now including awesomeness and unicorns.
