# CHANGELOG

### 1.5.4 (2026-06-04)
- Fix imagick stale layers (#879, @nlemoine)
- Fix the Imagick driver deactivating the alpha channel in `effects()->grayscale()` (transparent pixels were encoded as opaque gray); it now uses the alpha-preserving grayscale image type, like `usePalette()` (#880, @nlemoine)

### 1.5.3 (2026-06-03)
- Fix the Imagick driver painting a "black box" when pasting an image with transparent areas at an alpha lower than 100; the opacity now scales the existing per-pixel alpha instead of overwriting it (#878, @nlemoine)
- Fix the Imagick driver inverting the alpha channel in `effects()->negative()` (an opaque image became fully transparent); it now excludes the alpha channel, matching the GD driver (#877, @nlemoine)

### 1.5.2 (2026-01-09)
- Do not call curl_close on PHP 8.0+ (#875, @dmaicher)

### 1.5.1 (2025-12-09)
- Don't call imagedestroy on PHP 8.5+ (#873, @mlocati)

### 1.5.0 (2024-12-03)
- Minimum supported PHP version raised from 5.5 to 7.1 (#865, @alexander-schranz)
- Fix PHP 8.4 deprecation warnings (#865, @alexander-schranz)
- The GD driver now supports resolution for PHP >= 7.2 (#813, #866, @gutocf, @mlocati)

### 1.4.0 (2024-11-10)
- If a file couldn't be found, we now throw a NotFoundException exception (#853, @playmono)
- Add support for webp_lossless to GD and GMagick (#858, @ausi)
- Use streams in ExifMetadataReader (#861, @ausi)
- WebP format now supports animation (#812, @Yoann-TYT)

### 1.3.5 (2023-06-07)
* Fix PHP 8.2 warnings with Point class (#847, @anovsiradj)

### 1.3.4 (2023-04-17)
* Let PHP automatically detect the preferred TLS version (#841, @radli)
* Add @return phpdoc to ReturnTypeWillChange methods (#846, @mlocati)

### 1.3.3 (2022-11-16)
* Fix invalid format MIME type definition (#835, @xdanik)

### 1.3.2 (2022-04-01)
* Workaround for a bug in PHP 7.3+opcache that causes segmentation faults (#826, #829, #828, @ausi, @mnocon, @mlocati)

### 1.3.1 (2022-03-15)
* Fix undefined variable $engineRawVersion in Imagick/Gmagick DriverInfo (#825, @fxbt)

### 1.3.0 (2022-03-15)
* Minimum PHP supported version is now 5.5 (#820, @PowerKiKi)
* Support AVIF, HEIC, and JXL in Imagick driver (#759, #765, @ausi)
* Support AVIF in GD driver (#791, @mlocati)
* Make the $filter parameter of the resize method invariant (#776, @mlocati)
* Ability to specify the alpha-blending of the GD drawer (#790, @mlocati)
* Add support for SINCFAST filter in Imagick driver (#823, @mlocati)
* Fix applyMask() for GD driver (#708, @ninze)
* Fix PHP 8.1 compatibility (#768, #791, @ausi, @mlocati)
* Fix error handling in grayscale() for Gmagick driver (#757, @dmitry-kulikov)
* Fix convolve() for Imagick driver (#775, @mlocati)
* Fix array retuned by histogram() method of GD and Imagick drivers (#797, @mlocati)
* Fix handling alpha channel in Imagick (#775, #798, @mlocati)
* New Driver\Info classes to inspect installed drivers (#802, #805, #806, @mlocati)
* Fix wrong load logic in Imagick (#807, @mlocati)

### 1.2.4 (2020-11-03)
* Fix PHP 8.0 compatibility, except gmagick - see  https://bugs.php.net/bug.php?id=80106 (#740, @ausi)
* Optimize reading EXIF metadata from local files (#741, @jorrit)
* Fix rotation with imagick (#734, @lashus @ausi)
* Fix saving multi-layer images (eg animated GIFs) as plain images with gmagick and imagick (#746, @alexander-schranz @mlocati)
* Fix gmagick not resolving the correct export format in some edge cases (#750, @ausi)

### 1.2.3 (2019-12-04)
* Handle jfif extension in GD driver (#727, @sylvain-msl-talkspirit)
* Improve detection of unsupported Exit Metadata Reader (#729, @mlocati, @ausi)

### 1.2.2 (2019-07-09)
* The GD driver can now load WebP files (#711, #718, @lashus, @ausi)
* Avoid calling `imageantialias` if it's not available (#713, @ahukkanen)

### 1.2.1 (2019-06-03)
* Silence call to `\Imagick::setImageOpacity()` in order to prevent deprecation error with Imagick 3.4.4 and ImageMagick 6 (#715, @samdark, @mlocati)

### 1.2.0 (2018-12-07)
* `ExifMetadataReader` now returns all the available metadata, not only EXIF and IFD0 (#701, @mlocati)

### 1.1.0 (2018-10-25)
* New `ImageInterface::THUMBNAIL_FLAG_NOCLONE` flag for `thumbnail()` to let it modify the original image instance in order to save memory (@mlocati)

### 1.0.2 (2018-10-24)
* Check that the Imagick PHP extension is not compiled using ImageMagick version 7.0.7-32 because it does not work correctly (@mlocati)

### 1.0.1 (2018-09-27)
* `Box` now rounds the width/height it receives (previously it discarded the decimal points) (@mlocati)

### 1.0.0 (2018-09-25)
* New `FontInterface` method: `wrapText` - split a text into multiple lines, so that it fits a specific width (@mlocati)  
  **BREAKING CHANGE** if you have your own `FontInterface` implementation, it now must implement `wrapText`
* Drawer methods can now accept a thickness of zero (@mlocati)
* Fix drawing unfilled chords with GD driver (@mlocati)
* Fix thickness drawing of unfilled chords with Imagick and Gmagick drivers (@mlocati)
* Fix handling of radius in `circle` method implementations (@mlocati)
* The `dissolve` method of `ColorInterface` normalizes the final value of alpha (@mlocati)  
  **BREAKING CHANGE** `dissolve` doesn't throw a `Imagine\Exception\InvalidArgumentException` anymore

### 1.0.0-alpha2 (2018-09-08)
* The `coalesce` method of `LayerInterface` instances now returns the LayerInterface itself (@mlocati)  
  **BREAKING CHANGE** if you have your own `LayerInterface` implementation, it now must return `$this`
* The `__toString` method has been added to `ColorInterface` since all its implementations have it (@mlocati)  
  **BREAKING CHANGE** if you have your own `ColorInterface` implementation, it now must implement `__toString`
* New Imagick save option: `optimize` if set, the size of animated GIF files is optimized (@mlocati)  
  **NOTE** Imagick requires that the image frames have the same size
* The `paste` method now accepts images not fully included in the destination image (@mlocati)  
  **BREAKING CHANGE** the paste method doesn't throw an OutOfBoundsException anymore
* Fix handling of PNG compression in Imagick `save` method (@mlocati)
* New drawer methods: `rectangle` and `circle` (@mlocati)  
  **BREAKING CHANGE** if you have your own implementation of `DrawerInterface` you should add these two new methods
* The `getChannelsMaxValue` method has been added to `PaletteInterface` (@mlocati)  
  **BREAKING CHANGE** if you have your own `PaletteInterface` implementation, it now must implement this new method

### 1.0.0-alpha1 (2018-08-28)
* Imagine is now tested under Windows too (@mlocati)
* Add support to webp image format (@chregu, @antoligy, @alexander-schranz)
* Add `Imagine\File\LoaderInterface` that allows loading remote images with any imaging driver (@mlocati).
  You can use your own `LoaderInterface` implementation so that you can for instance use curl or any other library.
* Fix some phpdoc issues (@mlocati)
* `flipHorizontally` and `flipVertically` methods of GD images is now much faster on PHP 5.5+ (@mlocati)
* Fix loading of PNG indexed images with GD (@mlocati)
* Loading indexed images with GD is now much faster on PHP 5.5+ (@mlocati)
* Add support to grayscale images with Gmagick (@mlocati)
* Add support to alpha channels of Gmagick images (@mlocati)
* Fix `getColorAt` method of Gmagick images (@mlocati)
* Add `getTransformations` to the `Autorotate` filter, so that you can get the list of transformations that should be applied to an image accordingly to the EXIF metadata (@mlocati)
* The metadata reader now doesn't throw exceptions or warnings (@lentex, @mlocati)
* Fix documentation (@ZhangChaoWN, @Mark-H, @mlocati)
* Fix pixel range issue with Gmagick image (@b-viguier)
* Fix `text` drawer method on Windows when using relative font file paths (@mlocati)
* Fix `box` font method on Windows when using relative font file paths (@mlocati)
* Fix crash on Windows when loading an image with Imagick (@mlocati)
* Fix generation of API documentation (@mlocati)
* Add `jpeg_sampling_factors` option when saving JPEG images (Gmagick/Imagick only) (@ausi)
* Add BMP as supported image format (@mlocati)
* Add support to new image type constants of Imagick (@ausi)
* Check that Imagick correctly supports profiles (@ausi)
* Add `setMetadataReader`/`getMetadataReader` to `ImagineInterface` (@mlocati)  
  **BREAKING CHANGE** if you have your own `ImagineInterface` implementation, it now must implement those two methods
* Fix creating Gmagick images with alpha colors when palette doesn't support alpha (@FractalizeR)
* Fix warning about deprecated clone method in copy method of Imagick images (@mlocati)
* Fix copy methods of Images (the original image and its new copy are now fully detached) (@mlocati)
* It's now possible to use `clone $image` as an alternative to `$image->copy()` (@mlocati)
* Add support to custom classes for `BoxInterface`, `MetadataReaderInterface`, `FontInterface`, `LoaderInterface`, `LayersInterface`, `ImageInterface` (@mlocati)  
  **BREAKING CHANGE** if you have your own `ImagineInterface` implementation, it now must implement the methods of `ClassFactoryAwareInterface`
* Add support for pasting with alpha for GD and Imagick (@AlloVince, @mlocati)
* Downscaling a `Box` until it reaches a dimension less than 1 returns a box with dimension of 1 instead of throwing an exception (@mlocati)    
  **BREAKING CHANGE** if you relied on `Box::scale` throwing an exception in this case
* New filters: `BlackWhite`, `BorderDetection`, `Negation`, `Neighborhood` (@rejinka)
* Minor optimization of filters based on `OnPixelBased` (@rejinka, @mlocati)
* Add flag to `thumbnail` to allow upscaling images (@vlakoff)  
   **BREAKING CHANGE** the `$mode` argument has been renamed to `$settings`, and it's now an integer (but old string values are accepted for backward compatibility). In this case the `ManipulatorInterface` constants `THUMBNAIL_INSET`, `THUMBNAIL_OUTBOUND` were changed from string values to integers.
* New filter: `brightness` (@lenybernard, @mlocati)
* New filter: `colvolve` available for all graphics libraries except gmagick with version prior to 2.0.1RC2 (@armatronic, @mlocati)
* Fix bug in Imagine\Image\Palette\RGB::blend() (@dmolineus, @mlocati)
* Autoload was moved from PSR-0 to PSR-4, and code files moved from `/lib/Imagine` to `/src` (@mlocati)

### 0.7.1 (2017-05-16)
* Remove Symfony PHPUnit bridge as dependency (@craue)

### 0.7.0 (2017-05-02)
* Fix memory usage on metadata reading (@Seldaek)
* PHP 7.1 support
* Latest Imagemagick compatibility (@jdewit)

### 0.6.3 (2015-09-19)
* Fix wrong array_merge when calling Transformation::getFilters without filters
* Add export-ignore git attribute (@Benoth)
* Fix docblocks (@Sm0ke0ut and @norkunas)
* Fix animated gif loop length options (@jygaulier)
* Multiple tweaks for the repository and travis builds (@localheinz, @vrkansagara and @dunzun)
* Fix metadata extraction from streams (@armatronic)
* Fix autorotation (@tarleb)
* Load exifmetadata reader whenever possible
* Add metadata getter

### 0.6.2 (2014-11-11)
* Stripping image containing an invalid ICC profile fails
* MetadataBag now implements \Countable
* Fix wrong array_merge in MetadataBag giving invalid results with HTTP resources (@javaguirre)
* Fix Imagick merge strategy (@GrahamCampbell)
* Fixed various alpha issues (@RadekDvorak)
* Fix Image cloning on HHVM (@RdeWilde)
* Fix exception on invalid file using GD driver (@vlakoff).
* Fix ImageInterface::getSize on animated GIFs (@sokac)

### 0.6.1 (2014-06-16)
* Fix invalid namespace usage (#336 @csanquer).

### 0.6.0 (2014-06-13)
* BC break: Colors are now provided through the PaletteInterface. Any call
  to previous Imagine\Image\Color constructor must be removed and use the
  palette provided by Imagine\Image\ImageInterface::getPalette to create
  colors.
* BC break : Animated GIF default delay is no longer 800ms but null. This
  avoids resettings a delay on animated image.
* Add support for ICC profiles
* Add support for CMYK and grayscale colorspace images.
* Add filter argument to ImageInterface::thumbnail method.
* Add priority to filters (@Richtermeister).
* Add blur effect (@Nokrosis).
* Rename "quality" option to "jpeg_quality" and apply it only to JPEG files (@vlakoff).
* Add "png_compression_level" option (@vlakoff).
* Rename "filters" option to "png_compression_filter" (@vlakoff).
* Deprecate `quality` and `filters` ManipulatorInterface::save options, use
  `jpeg_quality`, `png_compression_level` and `png_compression_filter` instead.
* Add support for alpha blending in GD drawer (@salem).
* Add width parameter to Drawer::text (@salemgolemugoo).
* Add NotSupportedException when a driver does not support an operation (@rouffj).
* Add support for metadata.
* Fix #158: GD alpha detection + Color::isOpaque are broken.
* Fix color extraction for non-RGB palettes.

### 0.5.0 (2013-07-10)
* Add `Layers::coalesce`.
* Add filter option to `ImageInterface::resize`.
* Add sharpen effect.
* Add interlace support.
* `LayersInterface` now extends `ArrayAccess`, gives support for animated gifs.
* Remove Imagick and Gmagick flatten after composite.
* Fix pixel opacity reading in `Gmagick::histogram`.
* Deprecate pear channel installation.
* Deprecate phar installation.

### 0.4.1 (2012-12-13)
* Lazy-load GD layers.

### 0.4.0 (2012-12-10)
* Add support for image Layers.
* Add Colorize effect.
* Add documentation for the Grayscale effect.
* Port RelativeResize filter from JmikolaImagineBundle.

### 0.3.1 (2012-11-12)
* Add Grayscale effect.
* `Drawer::text` position fix.

### 0.3.0 (2012-07-28)
* Add configurable border thickness to drawer interface and implementations.
* Add `ImageInterface`::strip.
* Add Canvas filter.
* Add resolution option on image saving.
* Add Grayscale filter.
* Add sami API documentation.
* Add compression quality to Gmagick.
* Add effects API.
* Add method to get pixel at point in Gmagick.
* Ensure valid background color in rotations.
* Fill lines with color to prevent semi-transparency issues.
* Use `Imagick::resizeImage` instead of `Imagick::thumbnailImage` for resizing.
* Fix PNG transparency on save ; do not flatten if not necessary.

### 0.2.8 (2011-11-29)
* Add support for Travis CI.

### 0.2.7 (2011-11-17)
* Use composer for autoloading.

### 0.2.6 (2011-11-09)
* Documentation enhancements.

### 0.2.5 (2011-10-29)
* Add PEAR support.
* Documentation enhancements.

### 0.2.4 (2011-10-17)
* Add imagine.phar, phar and rake tasks.
* Add `ImagineInterface::read` to read from a stream resource.
* Documentation enhancements.
* Fix gifs transparency issues.

### 0.2.3 (2011-10-16)
* Documentation enhancements.

### 0.2.2 (2011-10-16)
* Documentation enhancements.

### 0.2.1 (2011-10-15)
* Add `PointInterface::move`.
* `BoxInterface::scale` can accept floats.
* Set antialias mode for GD images.
* Fix png compression.

### 0.2.0 (2011-10-06)
* Add `Imagine\Fill\Gradient\Linear::getStart`/`getEnd`.
* Add `Imagine\Image\Color::isOpaque`.
* Add Gmagick transparency exceptions.
* Add support for transparency for gif export.
* Add widen/heighten methods for easy scaling to target width/height.
* Add functionals tests to unit test thumbnails creation.
* Add the ability to use hexadecimal notation for `Imagine\Image\Color` construction.
* Implement fast linear gradient for Imagick.
* Remove lengthy image histogram comparisons.
* Extract `ManipulatorInterface` from `ImageInterface`.
* Switch methods to final.
* New method `ImageInterface::getColorAt`.
* Introduce `ImagineAware` abstract filter class.

### 0.1.5 (2011-05-18)
* Fix bug in GD rotate.

### 0.1.4 (2011-03-21)
* Add environment check to gracefuly skip test.

### 0.1.3 (2011-03-21)
* Improve api docs.
* Extract `FontInterface`.

### 0.1.2 (2011-03-21)
* Add check for GD.

### 0.1.1 (2011-03-21)
* Add rounding and fixed thumbnail logic.

### 0.1.0 (2011-03-14)
* First tagged version.
