# ImageOptimize Changelog

## 4.0.5 - 2023.05.19
### Changed
* Automate release generation via GitHub action
* Add versioning to the docs

### Fixed
* Side-step an issue which caused Craft 4.4.x to do unwanted image transform work even when using an external service to do the transforms ([#373](https://github.com/nystudio107/craft-imageoptimize/issues/373)) ([#13018](https://github.com/craftcms/cms/issues/13018))
* Remove the old Craft generated transform that's still sitting in the temp directory ([#380](https://github.com/nystudio107/craft-imageoptimize/pull/380))

## 4.0.4 - 2023.02.09
### Changed
* Use dynamic docker container name & port for the `buildchain`
* Update the `buildchain` to use Vite `^4.0.0`
* Updated docs to use VitePress `^1.0.0-alpha.29`
* Refactored the docs buildchain to use a dynamic docker container setup

## 4.0.3 - 2022.11.17
### Changed
* Fixed HMR in local dev with explicit alias that resolves to the actual directory

### Fixed
* Fixed an issue where the `craft image-optimize/optimize/create` CLI command did not properly optimize all images ([#350](https://github.com/nystudio107/craft-imageoptimize/issues/350))
* Fixed an issue which caused the Imgix `auto` to no longer work for auto format ([#357](https://github.com/nystudio107/craft-imageoptimize/issues/357))
* Fixed a JavaScript console error in field settings due to Garnish shuffling around how things work for menus
* Fixed an issue where `srcsetWidth()` wouldn't return the proper variant, due to strict comparison operator ([#327](https://github.com/nystudio107/craft-imageoptimize/issues/327))
* Fixed an issue where using a transform method other than Craft along with `asset.getUrl()` in your templates could throw an exception ([#363](https://github.com/nystudio107/craft-imageoptimize/issues/363))

## 4.0.2 - 2022.07.17
### Changed
* Add `allow-plugins` to `composer.json` to allow CI tests to work

### Fixed
* Fixed an issue where transforms don't get deleted on remote volumes if the format was set to `auto` ([#341](https://github.com/nystudio107/craft-imageoptimize/issues/341))
* Normalize for lowercase file extensions and normalize `jpeg` -> `jpg` everywhere

## 4.0.1 - 2022.07.08
### Fixed
* If there's no transform requested, return `null` so other plugins have a crack at it ([#349](https://github.com/nystudio107/craft-imageoptimize/issues/349))
### Fixed
* Fixed an issue where calling `generateUrl()` would throw an exception for the Imgix transform method ([#342](https://github.com/nystudio107/craft-imageoptimize/issues/342))

## 4.0.0 - 2022.06.28
### Changed
* If there's no transform requested, and we're not using some external service for image transforms, return `null` so other plugins have a crack at it

### Fixed
* Set the variant format to the current asset format if it is left empty, otherwise Craft recursively calls `getTransformUrl()` and hangs the queue ([#329](https://github.com/nystudio107/craft-imageoptimize/issues/329)) ([#343](https://github.com/nystudio107/craft-imageoptimize/issues/343))
* Fixed an issue where variants would not resave under certain circumstance due to a typing issue ([#335](https://github.com/nystudio107/craft-imageoptimize/issues/335))
* Make the properties in the `OptimizedImage` nullable to avoid null property values throwing an exception ([#345](https://github.com/nystudio107/craft-imageoptimize/issues/345))
* Fixed an issue that caused sub-folders to not appear in the OptimizedImages field settings ([#333](https://github.com/nystudio107/craft-imageoptimize/issues/333))
* Fixed an issue that could cause JavaScript errors for newly created OptimizedImages fields, and in slideouts ([#344](https://github.com/nystudio107/craft-imageoptimize/issues/344))

## 4.0.0-beta.3 - 2022.04.08
### Fixed
* Fix `ImageTransform::getAssetUri()` to properly handle S3 and other volume sub-directories

## 4.0.0-beta.2 - 2022.04.08
### Fixed

* Fixed an issue with properties not being initialized before being accessed, which would cause image uploads to fail ([#323](https://github.com/nystudio107/craft-imageoptimize/issues/323))

## 4.0.0-beta.1 - 2022.03.23

### Added

* Initial Craft CMS 4 compatibility

## 1.6.42 - 2022.02.23

### Added

* Added in GQL implementation for `srcsetMinWidth`, `srcsetMaxWidth`, `srcsetMinWidthWebp` & `srcsetMaxWidthWebp`.
  Updated the documentation to show how these are used ([#315](https://github.com/nystudio107/craft-imageoptimize/pull/315))

### Changed

* Only update variants for an existing asset if the image has been manipulated ([#314](https://github.com/nystudio107/craft-imageoptimize/pull/314))

### Fixed

* Use the new Imgix purge API endpoint properly ([#4](https://github.com/nystudio107/craft-imageoptimize-imgix/issues/4))
* Fixed an issue where corrupted images could result in the Imgix transformer throwing an exception ([#3](https://github.com/nystudio107/craft-imageoptimize-imgix/issues/3)) ([#306](https://github.com/nystudio107/craft-imageoptimize/issues/306))

## 1.6.41 - 2022.01.17

### Fixed

* Fixed an issue that could cause the JavaScript to not execute properly, causing the Settings to not appear
  correctly ([#310](https://github.com/nystudio107/craft-imageoptimize/issues/310))

## 1.6.40 - 2022.01.12

### Added

* Add `.gitattributes` & `CODEOWNERS`
* Add linting to build
* Add compression of assets
* Add bundle visualizer

## 1.6.39 - 2022.01.04

### Changed

* Updated the buildchain to use Node 16
* Changed buildchain to Vite from webpack 5
* Create variants via queue when an asset is moved in Craft `^3.7.1`

## 1.6.38 - 2021.11.18

### Fixed

* Fixed the display of WebP images in FireFox, Safari, and other browsers that support WebP, but not from Canvas by
  improving the WebP support detection method ([#301](https://github.com/nystudio107/craft-imageoptimize/issues/301))
* Fixed the SVGO optimizer by ensuring that image processors without `commandOptions` have the resulting command
  properly padded with a space ([#300](https://github.com/nystudio107/craft-imageoptimize/issues/300))
* Fixed an issue with the Sharp transform method where transforms could fail if the file extension was not
  lowercase ([#4](https://github.com/nystudio107/craft-imageoptimize-sharp/issues/4))

## 1.6.37 - 2021.11.11

### Fixed

* Fixed an issue where image placeholders would create images in incorrectly large sizes if certain EXIF data was
  present, and `preserveExifData` was set to `true` in `config/general.php`, resulting in a db error when trying to save
  the encoded image in the field data ([#296](https://github.com/nystudio107/craft-imageoptimize/issues/296))

## 1.6.36 - 2021.09.07

### Fixed

* Fixed an issue where the wrong Imgix API was being used for purging
  images ([#273](https://github.com/nystudio107/craft-imageoptimize/issues/273))

## 1.6.35 - 2021.07.14

### Fixed

* Special-case for Craft 3.7 or later, with the addition of a suffix to the Field content column
  name (https://github.com/craftcms/cms/issues/6922) (https://github.com/nystudio107/craft-imageoptimize/issues/289)

## 1.6.34 - 2021.06.10

### Changed

* Switched documentation system to VitePress
* When an asset is replaced, force the recreation of the
  variants (https://github.com/nystudio107/craft-imageoptimize/issues/283)

### Fixed

* Fixed an issue where uppercase file suffixes would cause webp image variants to not be
  created (https://github.com/nystudio107/craft-imageoptimize/issues/277)
* If `image/svg` is being ignored, add `image/svg+xml` to the mime types to ignore as well
* Now store the image sub-folders by name, since the UID can be different per
  environment (https://github.com/nystudio107/craft-imageoptimize/issues/282)

## 1.6.33 - 2021.04.23

### Added

* Added a setting to control the amount an image needs to be scaled down for automatic sharpening to be
  applied (https://github.com/nystudio107/craft-imageoptimize/issues/263)
* Added an option to cap the placeholder silhouette SVG size to
  32Kb (https://github.com/nystudio107/craft-imageoptimize/issues/270)

## 1.6.32 - 2021.04.15

### Fixed

* If there are too many sub-folders in an Asset volume, don't display them, return an empty
  array (https://github.com/nystudio107/craft-imageoptimize/issues/203)

## 1.6.31 - 2021.04.06

### Added

* Added `make update` to update NPM packages
* Added `make update-clean` to completely remove `node_modules/`, then update NPM packages

### Changed

* Use Tailwind CSS `^2.1.0` with JIT

### Fixed

* Fixed broken link to lower quality retina images article

## 1.6.30 - 2021.04.03

### Added

* Added some additional CLI command logging that shows the savings from optimization

### Changed

* Don't record or display errors that are a result of assets that are not images
* Don't display image transform errors twice

## 1.6.29 - 2021.03.31

### Fixed

* Fixed a regression that caused the field settings to not work properly for adding/removing variant
  blocks (https://github.com/nystudio107/craft-imageoptimize/issues/268)

## 1.6.28 - 2021.03.28

### Changed

* Updated to latest docs dependencies

### Fixed

* Fixed missing Composer dependency `nystudio107/craft-plugin-manifest`

## 1.6.27 - 2021.03.28

### Changed

* Move settings from the `composer.json` “extra” to the plugin main class
* Move the manifest service registration to the constructor
* Require `nystudio107/craft-imageoptimize-imgix` version `^1.2.1`

### Fixed

* Return `null` if no transform needs to be done, so other plugins can hook in

## 1.6.26 - 2021.02.26

### Fixed

* Fixed a regression that caused the image sizes to show up as `???` in the Asset Detail view

## 1.6.25 - 2021.02.23

### Changed

* Updated to use `craft-imageoptimize-imgix` version `^1.2.0`

### Fixed

* Always display sticky errors

## 1.6.24 - 2020.02.13

### Added

* Added error logging for `curl` errors

### Changed

* Attempt to display optimized image variants even if the image curl fails
* Remove the use of `curl` to obtain the remote image sizes, replacing it with frontend JS

## 1.6.23 - 2020.02.13

### Fixed

* Fixed parse errors with PHP < 7.3

## 1.6.22 - 2020.02.10

### Added

* Added a `stickyErrors` property to the OptimizedImages model, so we can post-facto display if something went wrong
  during image generation on the frontend to users
* Implemented `useFieldset` for Craft 3.6

### Fixed

* Fixed deprecation errors in Craft CMS 3.5 or later
* Fixed an issue where aspect ratios could be improperly rounded, causing a division by zero error

## 1.6.21 - 2020.12.31

### Added

* Added a **ImageOptimize Info** Utility that allows you to see the ImageOptimize settings even in environments
  where `allowAdminChanges` is `false`
* Added a try/catch block to Imagine calls to handle errors more gracefully

### Changed

* Split out vendors & commons chunks
* Switch from using `->each()` to using `craft\db\Paginator` to paginate asset query results, to address out of memory
  issues on massive queries
* ImageOptimize now requires Craft CMS 3.1.19 or later

## 1.6.20 - 2020.12.08

### Changed

* Lowercase written instances of "Imgix"
* Added additional logging for image placeholder and color extraction
* Moved the CSS/JS buildchain over to webpack 5
* Updated to latest npm deps

## 1.6.19 - 2020.10.07

### Fixed

* Fixed improperly generated `webp` URL for Imgix

## 1.6.18 - 2020.09.28

### Changed

* If an Optimized Images field is edited, only re-save the transforms for that specific field
* Allow an optional `--field` to be passed into the `php craft image-optimize/optimize/create` console command to only
  create image variants associated with a specific Optimized Images field
* Allow an optional `--force` flag to be passed into the `php craft image-optimize/optimize/create` console command for
  force image variant creation

## 1.6.17 - 2020.09.18

### Changed

* Sped up image optimization on multi-site setups by not spawning a new optimizing images job if the element is merely
  propagating to other sites

### Fixed

* Fixes issue when using `asset.getUrl({ })` with Imgix, where `format` would be coerced to the image's extension
  format, when it should have been left as `null`.

## 1.6.16 - 2020.08.31

### Changed

* Cleaned up the field styling to make it look correct on Craft CMS > 3.5.0
* Default to `false` if `$variant['useAspectRatio']` is somehow null

## 1.6.15 - 2020.08.25

### Added

* Added support for Redis queue jobs
* If an Optimized Images field isn't set to create variants for the sub-folder that an Asset is in, it'll display N/A

### Changed

* Cleaned up the field formatting for Craft CMS 3.5 CSS layout changes

### Fixed

* Fixed an issue with `.webp` URLs not working for URLs with ports in them
* Make missing webp variants display better
* Fixed an issue where images that were in sub-folders of sub-folders didn't have image variants created for them, if
  only specific volume sub-folders were chosen for optimization

## 1.6.14 - 2020.06.08

### Fixed

* Ensure image quality is set to `null` as “Auto” setting of image quality

## 1.6.13 - 2020.04.16

### Fixed

* Fixed Asset Bundle namespace case

## 1.6.12 - 2020.03.21

### Added

* Added the `create-asset` console command for regenerating the responsive image variants for a single Asset ID

### Changed

* Generated image URLs that have no file format extension are now properly displayed in the GUI (an issue mostly with
  serverless Sharp)

## 1.6.11 - 2020.02.12

### Changed

* Sanity check the inputs before normalizaing the file format

## 1.6.10 - 2020.02.11

### Changed

* Normalize the file format to lowercase before transforming

## 1.6.9 - 2020.02.06

### Changed

* Properly documented how the data in the `imageTransformTypeSettings` config is stored

### Fixed

* Fixed an issue where an SVG sent in to an image transform handler as a thumbnail request without specifying another
  format to convert to

## 1.6.8 - 2020.01.27

### Fixed

* Fixed an issue where an SVG sent in to image transform handler without specifying another format to convert to
* Fixed an issue where `MTIME` or other query string params could be listed as part of the image format

## 1.6.7 - 2020.01.08

### Added

* Added the ability to retrieve the dominant color palette as RGB values, making things like gradients easier to do
* ImageOptimize will now send back an Imgix or other transform method URL for `asset.getUrl()` with no transform applied

## 1.6.6 - 2019.11.19

### Added

* Added a Preferences item to control whether allow limiting the creation of Optimized Image Variants for images by
  sub-folders

## 1.6.5 - 2019.11.13

### Added

* Added the ability to choose the sub-folders in an asset volume in which Optimized Image Variants will be created

### Changed

* Parse volumes sub-folders as environment variables

## 1.6.4 - 2019.10.31

### Changed

* If an image is an animated `.gif` file, never change the file format

## 1.6.3 - 2019.10.24

### Changed

* Force update to `"nystudio107/craft-imageoptimize-imgix": "^1.1.1"`
* Fixed aspect ratio for CP thumbnail images
* Default `createPlaceholderSilhouettes` to `false` so people need to enable this setting if they want to use them (they
  can be on the larger side)

## 1.6.2 - 2019.09.25

### Changed

* Added support for native GraphQL in Craft 3.3

## 1.6.1 - 2019.08.13

### Changed

* Added more robust sanity checking if an invalid URL or path is being passed into `ImageTransform::appendExtension()`

## 1.6.0 - 2019.07.05

### Added

* Added support for Sharp via [AWS Serverless Image Handler](https://aws.amazon.com/solutions/serverless-image-handler/)
  as a Transform Method

### Changed

* Fixed an issue where ImageOptimize was not handling assets it didn't know how to transform property, resulting in
  generic thumbnails if you used the [Embedded Assets](https://github.com/spicywebau/craft-embedded-assets/) plugin
* Updated `ImageTransformInterface` to remove the deprecated `$params`

## 1.5.7 - 2019.06.13

### Added

* Added a `lightness` calculation based on a weighted average of the extracted dominant color palette to give you an
  idea of the image's overall lightness

### Changed

* Don't force the format for fallback images
* Rebuilt assets to fix npm vulnerabilities

## 1.5.6 - 2019.05.21

### Changed

* Fixed an issue where newly added Image Variant blocks had incorrect ids on the Retina checkboxes
* Updated build system

## 1.5.5 - 2019.04.22

### Changed

* Updated Twig namespacing to be compliant with deprecated class aliases in 2.7.x

## 1.5.4 - 2019.02.22

### Changed

* Fixed an issue where focal points weren't always respected for Imgix

## 1.5.3 - 2019.02.07

### Changed

* Fixed an issue where `.env` vars were not actually parsed

## 1.5.2 - 2019.02.07

### Changed

* If you're using Craft 3.1, ImageOptimize will use
  Craft [environmental variables](https://docs.craftcms.com/v3/config/environments.html#control-panel-settings) for
  secrets

## 1.5.1 - 2018.12.28

### Changed

* Refactored the Imgix and Thumbor Image Transforms out to external packages

## 1.5.0 - 2018.12.27

### Changed

* Refactored out the `ImageTransform` interface to use Yii2's DI to allow them to be stand-alone components
* Respond to `Assets::EVENT_GET_ASSET_THUMB_URL` for direct thumbnail generation from third party image transform
  services

## 1.4.45 - 2018.11.28

### Changed

* Call `App::maxPowerCaptain()` whenever a queue is manually run (both via web and console request)
* Minor Thumbor fixes

## 1.4.44 - 2018.11.18

### Changed

* Default format and quality to null so they can be omitted if you're generating transforms via Twig
* Fix an issue with Imgix with images that have no focal point set

## 1.4.43 - 2018.11.05

### Changed

* Fix Thumbor focal point order
* Fix a regression that broke images in sub-folders for Imgix
* Retooled the JavaScript build system to be more compatible with edge case server setups

## 1.4.42 - 2018.10.15

### Added

* Added the ability to have OptimizedImages fields ignore `SVG` and/or `GIF` files
* Added support [Thumbor](http://thumbor.org/) resizing service

## 1.4.41 - 2018.10.11

### Changed

* Fixed an issue where volumes with sub-folders such as Amazon S3 or Google Cloud didn't generate the correct URLs
* Fixed the build process so it will no longer look for `devServer` on installs
* Added a link to the **variant does not exist** to aid in diagnosing what is wrong
* Changed the signature of `::getWebPUrl()` to send in all of the transform params

## 1.4.40 - 2018.10.05

### Added

* Add Super Table conditional for field

### Changed

* Updated build process

## 1.4.39 - 2018.09.25

### Changed

* Added a try/catch around ColorThief, to catch errors thrown due to empty/transparent images
* Fix a regression that could cause Optimized Images to not be generated correctly
* Modernized package.json and webpack build

## 1.4.38 - 2018.08.20

### Changed

* Fixed an incompatibility with the Spoon plugin by removing `matrix-field` class from field type settings
* Fixed an erroneous 2:2 aspect ratio in the default settings
* Moved to a modern webpack build config for the Control Panel
* Added install confetti

## 1.4.37 - 2018.08.09

### Changed

* Reverted an errant commit that removed a fix for propagating field data in multi-site environments
* Ensure that `.webp` variants have fully qualified absolute URLs

## 1.4.36 - 2018.08.06

### Added

* Added the ability to access each image variant's height

### Changed

* Update to the latest version of the Imgix PHP library

## 1.4.35 - 2018.07.12

### Changed

* Catch all exceptions that happen during `ResaveOptimizedImages()` job so that execution can continue

## 1.4.34 - 2018.07.12

### Changed

* Smarter appending of variant creator suffixes, to handle URLs that have query strings

## 1.4.33 - 2018.05.24

### Changed

* Handle JPEGs coming in as both `jpg` & `jpeg` for the detected file format
* Remove vestigal `empty()` checks

## 1.4.32 - 2018.05.09

### Added

* Improved CraftQL support by allowing parameter passing to `src` and `srcUrls`

## 1.4.31 - 2018.04.22

### Added

* Added CraftQL support

## 1.4.30 - 2018.04.09

### Added

* Added additional profiling information

## 1.4.29 - 2018.04.06

### Added

* Added profiling to the image variant creation

### Changed

* Vastly increase the speed with which the transforms are created when done via Twig templating code
* Increased the speed of the variant creation in general

## 1.4.28 - 2018.04.02

### Changed

* Switched over to using the Unsharp Mask (`usm`) filter for auto-sharpening Imgix images

## 1.4.27 - 2018.04.02

### Changed

* Removed unused composer dependencies

## 1.4.26 - 2018.03.31

### Changed

* Fixed a typo with `$generatePlacholders` that would cause saving images to fail

## 1.4.25 - 2018.03.30

### Changed

* Fixed a typo in the `config.php` settings, changed `generatePlacholders` -> `generatePlaceholders`
* Made the reduced quality of retina images if `lowerQualityRetinaImageVariants` is enabled less aggressive

## 1.4.24 - 2018.03.19

### Changed

* Fixed an issue with propagating field data in multi-site environments
* Scrutinizer code cleanup / refactoring
* If `.webp` support isn't configured, we don't display the images for the `webp` variants
* If images are being generated via template (not recommended) disable running the image optimizers and variant creators
  by default

### Added

* Added `craft.imageOptimize.serverSupportsWebP()` function to determine whether the server is capable of
  creating `.webp` variants
* Added validation rules for `imgixSecurityToken` so the value can be saved in the model

## 1.4.23 - 2018.03.03

### Changed

* The lengthy generation of placeholders should _really_ be off by default when doing them via Twig now
* Asset move operations now cause Optimized Image Variants to be re-saved via a non-blocking queue job

## 1.4.22 - 2018.03.02

### Changed

* Using Image Optimize via Twig should have less of a performance hit now, since all placeholder image/color palette
  generation is disabled
* Fixed deprecation errors from Craft CMS 3 RC13

## 1.4.21 - 2018.02.27

### Changed

* Show a warning if people try to add an OptimizedImages field in a Matrix block

## 1.4.20 - 2018.02.27

### Added

* Allow for CLI processing of specific Asset Volumes via `image-optimize/optimize/create volumehandle`
* Added `automaticallyResaveImageVariants` to `config.php` to allow disabling of the automatic re-saving of Image
  Variants for people who want to do it manually via the CLI
* Added a `.srcWebp()` method for OptimizedImages
* Added an optional `width` parameter that can be passed into `.src()` and `.srcWebp()`
* Added support for mostly deprecated `1x`, `2x`, etc. srcsets by passing an optional `true` parameter
  to `.srcsetWidth(XXX, true)` and `.srcsetWidthWebp(XXX, true)`

### Changed

* Fix more deprecation errors from Craft CMS 3 RC 12

## 1.4.19 - 2018.02.23

### Changed

* Fix deprecation errors from Craft CMS 3 RC 12 (which were causing slowdowns)

## 1.4.18 - 2018.02.19

### Added

* Fix a division by 0 error with some custom Craft transforms when using Imgix as a transform method

## 1.4.17 - 2018.02.16

### Added

* Added lightswitch controls to the OptimizedImages field that let you control what is displayed

### Changed

* Ensure we handle all of the potential `$transform` types passed into `EVENT_GET_ASSET_URL`
* Both `createColorPalette` and `createPlaceholderSilhouettes` are now off by default when
  using `craft.imageOptimize.createOptimizedImages()` via Twig, but can be overridden

## 1.4.16 - 2018.02.15

### Added

* Added support for optional [security token](https://docs.imgix.com/setup/securing-images) used to sign image URLs from
  Imgix
* Added `image-optimize/optimize/create` and `image-optimize/optimize/clear` console commands for command line Optimized
  Image Variant creation

### Changed

* Display the non-webp version of an image when it exists, but the browser doesn't support displaying `.webp`
* Handles error conditions with `filesize` better

## 1.4.15 - 2018.02.14

### Changed

* Resave all asset volumes after the settings are changed (not just the Transform Method)
* Save the Optimized Image Variants via an async queue when possible
* Detect `gd` installation via `function_exists` instead of `extension_loaded`
* Handle protocol-relative siteUrls better

## 1.4.14 - 2018.02.09

### Changed

* Fixed an issue where certain settings could not be saved via the Control Panel
* Check to ensure that `GD` is installed before attempting to generate silhouette placeholders
* Show a warning on the Settings page if `GD` is not installed

## 1.4.13 - 2018.02.05

### Changed

* Removed *Edit Image* button, since Craft CMS 3 now includes one in the Asset preview

## 1.4.12 - 2018.02.01

### Changed

* Removed the `api-key` parameter from Imgix image transform URLs

## 1.4.11 - 2018.01.30

### Changed

* Renamed the composer package name to `craft-imageoptimize`
* Fixed a regression that broke protocol-relative siteUrls

## 1.4.10 - 2018.01.26

### Added

* Shows an error if an OptimizedImages field is added to anything other than an Asset's layout
* Added a warning if a config setting is being overridden by the `config.php`
* Added a number of config settings to the Control Panel GUI

### Changed

* `UrlHelper::urlWithProtocol` -> `UrlHelper::urlWithScheme` for Craft CMS 3 RC7 compatibility
* Fixed an issue where you could delete the last Image Variant in the field settings, even though the option was
  disabled
* Handle the display of Optimized Image Variant names better when coming from Imgix

## 1.4.9 - 2018.01.20

### Added

* Added an *Edit Image* button to the Optimized Images field view

### Changed

* Fixed `getWebPUrl()` for the Imgix image transform driver
* Fixed an issue where image uploads/changes would fail if you had an invalid or
  non-existent `activeImageVariantCreators` set
* Fixed an issue with protocol-relative siteUrls

## 1.4.8 - 2018.01.11

### Changed

* Fixed a flaw in the default aspect ratios
* Fixed Focal Point resaving issue
* Resaving Optimized Image Variants after making field changes should be quicker now

## 1.4.7 - 2017.12.29

### Changed

* Fixed a regression that would cause issues with PHP 7.0 (but not later versions of PHP)

## 1.4.6 - 2017.12.27

### Changed

* Handle the case of no Optimize Image Variants being created due to upscaling by just returning the original image
* Made the documentation on the OptimizedImages Field more clear, in that it needs to be added to an Asset Volume's
  layout

## 1.4.5 - 2017.12.22

### Added

* Added `.getMaxSrcsetWidth()` to work around issues with `<img srcset>` choosing sizes larger than are available
* Added a max size of 30K for generated silhouette SVGs, at which point it returns a simple SVG box

### Changed

* Better exception handling

## 1.4.4 - 2017.12.19

### Added

* Image variant creators now clean up after themselves when an Asset transform is deleted

### Changed

* ImageOptimize now _requires_ at least Craft CMS 3 RC3 or later

## 1.4.3 - 2017.12.19

### Added

* Image transforms that are scaled down >= 50% are now auto-sharpened (controllable via the `autoSharpenScaledImages`
  setting in `config.php`)
* It's now possible to set the default aspect ratios in the `config.php`

### Changed

* No longer possible delete the last Optimized Image variant
* At least one Optimized Image variant will always be present

## 1.4.2 - 2017.12.15

### Changed

* Fixed an issue where `.webp` variants would not be created

## 1.4.1 - 2017.12.13

### Changed

* Re-create the Responsive Image Variants when an Asset is replaced
* Handle cache busting for the Responsive Image Variants by appending an `?mtime=` string to the URL
* Better display of image variants when no variants are created
* No longer throws errors if you don't have the an image variant creator installed
* Wrap URLs and data returned to templates with `Template::raw()` so they won't be HTML entity encoded by default

## 1.4.0 - 2017.12.12

### Added

* Added `craft.imageOptimize.createOptimizedImages` to allow for the dynamic creation of Optimized Image variants
* Added `craft.imageOptimize.placeholderBox` to create a transparent SVG placeholder box of an arbitrary size and color
* Automatically reduce the quality of retina images (controllable via the `lowerQualityRetinaImageVariants` setting
  in `config.php`)
* Don't create Optimized Image Variants if it means the original image would be up-scaled (controllable via
  the `allowUpScaledImageVariants` setting in `config.php`)
* Purge URLs for assets that are deleted from services like Imgix

### Changed

* Fixed an issue where deleted Optimized Image Variant blocks would cause an error once saved
* Changed the default `optipng` compression to `-o3` so the compression time is more reasonable
* Updated README.md to reflect the new features

## 1.3.6 - 2017.12.10

### Changed

* Fixed an error with Imgix transforms

## 1.3.5 - 2017.12.06

### Changed

* Switched from `file_exists()` to `is_file()` for detecting image processor and variant commands
* Fixed an issue with Optimized Image Variant generation on certain setups
* The OptimizedImages field now displays protocol-relative images properly
* Added better debug logging
* Updated to require craftcms/cms `^3.0.0-RC1`

## 1.3.4 - 2017.12.03

### Changed

* Fixed an issue where selecting image variants would result in the wrong aspect ratio
* Changed the default image variant widths

## 1.3.3 - 2017.11.30

### Added

* Auto-purge remote Imgix image URLs when assets are changed

### Changed

* Fixed an issue with newly uploaded assets that have an OptimizedImages field in their Volume Layout

## 1.3.2 - 2017.11.14

### Added

* Added media query srcset sizes for precise control over the output sizes

## 1.3.1 - 2017.11.13

### Added

* Added the display of the dominant color palette and the lazy load placeholder images to the Field
* Optimize the placeholder images regardless of user settings
* Fixed an issue where newly uploaded assets would not resave on the AJAX request
* Added portrait & landscape responsive image variant presets

## 1.3.0 - 2017.11.10

### Changed

* Added support for globally replacing native Craft transforms with a service like Imgix, with zero template changes
* Added a Welcome page after installing ImageOptimize
* Performance improvements when generating the placeholders

## 1.2.10 - 2017.11.04

### Changed

* Fixed broken OptimizedImages Field settings
* Fixed `optipng` path in `config.php`
* Implemented an abstract `ImageTransform` class & interface

## 1.2.9 - 2017.11.03

### Added

* Added support for using [Imgix](https://www.imgix.com/) to create the responsive image transforms

### Changed

* Switched over to using `ResaveElements` queue to handle newly uploaded Assets
* Implemented optimized SVG data URIs, which can shave 15% off of the size of the SVG size

## 1.2.8 - 2017.10.19

### Changed

* More paranoid sanity checking of the `activeImageProcessors` and `activeImageVariantCreators` `config.php` settings

### Added

* Added the ability to control when image variants are created via `generateTransformsBeforePageLoad` `config.php`
  setting
* Added a `createColorPalette` in `config.php` to control dominant color palette creation
* Added a `createPlaceholderSilhouettes` in `config.php` to control silhouette placeholder image creation

## 1.2.7 - 2017.10.18

### Added

* Added the ability to make inline SVG silhouette images as placeholder images for lazing loading

## 1.2.6 - 2017.10.16

### Changed

* Moved the default variants to the `config.php` and Settings model, so they can be overridden

### Added

* Added the variant setting **Enforce Aspect Ratio** to allow for images with no fixed aspect ratio

## 1.2.5 - 2017.10.11

### Added

* Added the ability to automatically set the placeholder color to the image's dominant color
* Added the ability to extract the 5 dominant colors from an image

## 1.2.4 - 2017.10.10

### Added

* Added automatic generation of Instagram-style low resolution placeholder images for lazing loading

## 1.2.3 - 2017.09.16

### Added

* Added support for 2x and 3x retina images
* Added a `.src()` method to get the default responsive variant

### Changed

* Updated the README.md to be more descriptive

## 1.2.2 - 2017.09.11

### Changed

* Responsive Image Variants now default to `jpg` as a file format, for client-proofing purposes
* Fixed an issue where re-arranging to adding/deleting Responsive Image Variants could cause issues
* Fixed an issue with non-manipulatable images like `PDF`

## 1.2.1 - 2017.09.10

### Changed

* Fixed an issue that could leave stale image variants around
* Ensure that the optimized image variants are re-created if the image is edited
* Added logging to show the savings for image variants
* Fixed the way the Settings page is rendered
* Updated `README.md`

## 1.2.0 - 2017.09.08

### Added

* Added `OptimzedImages` Field
* Updated `README.md`

## 1.1.0 - 2017.08.07

### Added

* Added support for automatic `webp` image variant creation

## 1.0.10 - 2017.08.06

### Changed

* Fixed support for the `mozjpeg` image processor

## 1.0.9 - 2017.07.15

### Changed

* Craft 3 beta 20 compatibility

## 1.0.8 - 2017.04.20

### Changed

* Fixed the packagist.org package name to coincide with the plugin renaming
* Added debug `trace` logging in the event handler
* Updated `README.md`

## 1.0.7 - 2017.04.10

### Changed

* Renamed the plugin from `ImageOptim` to `ImageOptimize`
* Added `.webp` support

## 1.0.6 - 2017.04.08

### Changed

* Added `createSettingsModel()` to the main plugin class

## 1.0.5 - 2017.03.24

### Changed

* `hasSettings` -> `hasCpSettings` for Craft 3 beta 8 compatibility
* Added Craft 3 beta 8 compatible settings
* Modified config service calls for Craft 3 beta 8

## 1.0.4 - 2017.03.12

### Added

- Added code inspection typehinting for the plugin & services

### Changed

- Removed unused `resources/img`

## 1.0.3 - 2017.03.12

### Added

- Added support for `gif` images via `gifsicle`
- Added `craft/cms` as a composer dependency

### Changed

- Code refactor/cleanup

## 1.0.2 - 2017.03.11

### Added

- Added logging of the savings for each image optimization if `devMode` is on

## 1.0.1 - 2017.03.11

### Added

- Added `mikehaertl/php-shellcommand` as a dependency in `composer.json`

### Changed

- Updated `README.md` with more information

## 1.0.0 - 2017.03.11

### Added

- Initial release
