Release Notes of php_imagine

PHP 5.3 Object Oriented image manipulation library


June 7, 2023
  • Fix PHP 8.2 warnings with Point class (#847, @anovsiradj)
April 17, 2023
  • Let PHP automatically detect the preferred TLS version (#841, @radli)
  • Add @return phpdoc to ReturnTypeWillChange methods (#846, @mlocati)
November 16, 2022
  • Fix invalid format MIME type definition (#835, @xdanik)
April 1, 2022
  • Workaround for a bug in PHP 7.3+opcache that causes segmentation faults (#826, #829, #828, @ausi, @mnocon, @mlocati)
March 15, 2022
  • Fix undefined variable $engineRawVersion in Imagick/Gmagick DriverInfo (#825, @fxbt)
March 15, 2022
  • 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)
November 3, 2020
  • Fix PHP 8.0 compatibility, except gmagick - see (#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)
December 4, 2019
  • Handle jfif extension in GD driver (#727, @sylvain-msl-talkspirit)
  • Improve detection of unsupported Exit Metadata Reader (#729, @mlocati, @ausi)
July 9, 2019
  • The GD driver can now load WebP files (#711, #718, @lashus, @ausi)
  • Avoid calling imageantialias if it's not available (#713, @ahukkanen)
June 3, 2019
  • Silence call to \Imagick::setImageOpacity() in order to prevent deprecation error with Imagick 3.4.4 and ImageMagick 6 (#715, @samdark, @mlocati)
December 7, 2018
  • ExifMetadataReader now returns all the available metadata, not only EXIF and IFD0 (#701, @mlocati)
October 25, 2018
  • New ImageInterface::THUMBNAIL_FLAG_NOCLONE flag for thumbnail() to let it modify the original image instance in order to save memory (@mlocati)
October 24, 2018
  • Check that the Imagick PHP extension is not compiled using ImageMagick version 7.0.7-32 because it does not work correctly (@mlocati)
September 27, 2018
  • Box now rounds the width/height it receives (previously it discarded the decimal points) (@mlocati)
September 25, 2018
  • 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
September 8, 2018
  • 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
August 28, 2018
  • 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)
May 16, 2017
  • Remove Symfony PHPUnit bridge as dependency (@craue)
May 2, 2017
  • Fix memory usage on metadata reading (@Seldaek)
  • PHP 7.1 support
  • Latest Imagemagick compatibility (@jdewit)
September 19, 2015
  • 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
November 11, 2014
  • 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)
June 16, 2014
  • Fix invalid namespace usage (#336 @csanquer).
June 13, 2014
  • 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.
July 10, 2013
  • 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.
December 13, 2012
  • Lazy-load GD layers.
December 10, 2012
  • Add support for image Layers.
  • Add Colorize effect.
  • Add documentation for the Grayscale effect.
  • Port RelativeResize filter from JmikolaImagineBundle.
November 12, 2012
  • Add Grayscale effect.
  • Drawer::text position fix.
July 28, 2012
  • 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.
November 29, 2011
  • Add support for Travis CI.
November 17, 2011
  • Use composer for autoloading.
November 9, 2011
  • Documentation enhancements.
October 29, 2011
  • Add PEAR support.
  • Documentation enhancements.
October 17, 2011
  • Add imagine.phar, phar and rake tasks.
  • Add ImagineInterface::read to read from a stream resource.
  • Documentation enhancements.
  • Fix gifs transparency issues.
October 16, 2011
  • Documentation enhancements.
October 16, 2011
  • Documentation enhancements.
October 15, 2011
  • Add PointInterface::move.
  • BoxInterface::scale can accept floats.
  • Set antialias mode for GD images.
  • Fix png compression.
October 6, 2011
  • 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.
May 18, 2011
  • Fix bug in GD rotate.
March 21, 2011
  • Add environment check to gracefuly skip test.
March 21, 2011
  • Improve api docs.
  • Extract FontInterface.
March 21, 2011
  • Add check for GD.
March 21, 2011
  • Add rounding and fixed thumbnail logic.
March 14, 2011
  • First tagged version.