NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #1070 most downloaded on Packagist
PHP library to manipulate various color representations
Last release 3 days ago
17 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Rarely documented
notes for 10 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
175 releases · first in 2015
Full Changelog : 3.0.12...3.0.13
Full Changelog: 3.0.12...3.0.13
Full Changelog : 3.0.11...3.0.12
Full Changelog: 3.0.11...3.0.12
Full Changelog : 3.0.10...3.0.11
One column per quarter.
Full Changelog: 3.0.10...3.0.11
Full Changelog : 3.0.9...3.0.10
Full Changelog: 3.0.9...3.0.10
Full Changelog : 3.0.8...3.0.9
Full Changelog: 3.0.8...3.0.9
Full Changelog : 3.0.7...3.0.8
Full Changelog: 3.0.7...3.0.8
Full Changelog : 3.0.6...3.0.7
Full Changelog: 3.0.6...3.0.7
Full Changelog : 3.0.5...3.0.6
Full Changelog: 3.0.5...3.0.6
Full Changelog : 3.0.4...3.0.5
Full Changelog: 3.0.4...3.0.5
Nothing published for this version
Nothing published for this version
This project publishes no release notes. Between 3.0.1 and 3.0.2 there were 3 commits, 2 of them substantive:
This project publishes no release notes. Between 3.0.1 and 3.0.2 there were 3 commits, 2 of them substantive:
This project publishes no release notes. Between 3.0.0 and 3.0.1 there were 1 commits, 1 of them substantive:
This project publishes no release notes. Between 3.0.0 and 3.0.1 there were 1 commits, 1 of them substantive:
Pdf::getPdfColor(), getPdfStrokeColor(), getPdfFillColor(), getColorObject(), getPdfRgbComponents() and getPdfCmykComponents() take a trailing bool $a
Pdf::getPdfColor(), getPdfStrokeColor(), getPdfFillColor(),
getColorObject(), getPdfRgbComponents() and getPdfCmykComponents() take a
trailing bool $allowSpot = true, which forces a device color when false.
A subclass overriding any of these must mirror the new signature.Web, Spot and Pdf is final except the documented
extension points, Web::getColorObj(), Spot::getSpotColor(),
Pdf::getPdfColor() and Pdf::getColorObject().Model::__construct() is gone from the abstract base; each model defines its
own constructor and validates the component names it is given.UnknownComponentException.Model\Template::invertColor() returns static rather than self, and the
interface gained withInvertedColor().Css::normalizeValue() is no longer abstract. Scaling moved to the new
ComponentNormalizer, which Css holds as a collaborator;
Web::normalizeValue() delegates to it.Css::__construct() accepts an optional ComponentNormalizer.Rgb::getCssColor() emits channels as integers in [0..255]
(rgb(255,0,0)) instead of whole percentages (rgb(100%,0%,0%)), and
Gray::getCssColor() emits g(128) instead of g(50%).rgba(18,52,86,0.4706)) instead of the
full float repr.getPdfSpotObjects() carries a
/Range array, matching the DeviceCMYK one.getPdfSpotResources() and getPdfSpotResourcesByKeys() raise when a
registered spot color has no PDF object.rebeccapurple is recognised.rgb(1.2.3,4,5) raises.rgb(64, 128 191).rgb(-10,128,191) is #0080bf and hsl(-150,50%,50%) is
hsl(210,50%,50%).Model::withInvertedColor(), a non-mutating counterpart to invertColor().Web::getClosestWebColorByDeltaE(), getClosestWebColorByDeltaEFromString()
and getLabSquareDistance(): nearest-color search in CIE Lab.ExceptionInterface, implemented by both exception types.UnknownComponentException for a component name a model does not define.ColorModelType, a backed enum for the model type, and Model::getTypeEnum().ColorParserInterface, SpotRegistryInterface and
PdfColorWriterInterface, one per role of the class hierarchy.ComponentNormalizer, the component scaler the CSS parser delegates to.deg, grad, rad, turn), the slash-alpha form
and percentage alpha.getSpotColorObj(), getSpotLabColorObj(),
getSpotColors(), Pdf::getColorObject()) return copies of the registered
models.addSpotLabColor() narrows the range option to [-128..127], the interval the
Lab model represents, so /Range, /C0 and /C1 agree.Cmyk::toRgbArray() returns floats for saturated channels, which used to be
returned as int.invalid spot color name: <name> by the lookup path too.unsupported color syntax.NAN is rejected as a component value; INF and -INF clamp.$tint applies to spot colors only; a device color is always written at full
intensity.key, all and none are spot-only and do not resolve with
$allowSpot = false.This project publishes no release notes. Between 2.13.5 and 3.0.0 there were 1 commits, 1 of them substantive:
This project publishes no release notes. Between 2.13.4 and 2.13.5 there were 2 commits, 2 of them substantive:
This project publishes no release notes. Between 2.13.4 and 2.13.5 there were 2 commits, 2 of them substantive:
Nothing published for this version
This project publishes no release notes. Between 2.13.2 and 2.13.3 there were 1 commits, 1 of them substantive:
This project publishes no release notes. Between 2.13.2 and 2.13.3 there were 1 commits, 1 of them substantive:
This project publishes no release notes. Between 2.13.1 and 2.13.2 there were 1 commits, 1 of them substantive:
This project publishes no release notes. Between 2.13.1 and 2.13.2 there were 1 commits, 1 of them substantive:
This project publishes no release notes. Between 2.13.0 and 2.13.1 there were 1 commits, 1 of them substantive:
This project publishes no release notes. Between 2.13.0 and 2.13.1 there were 1 commits, 1 of them substantive:
This project publishes no release notes. Between 2.12.5 and 2.13.0 there were 3 commits, 2 of them substantive:
This project publishes no release notes. Between 2.12.5 and 2.13.0 there were 3 commits, 2 of them substantive:
This project publishes no release notes. Between 2.12.4 and 2.12.5 there were 1 commits, 1 of them substantive:
This project publishes no release notes. Between 2.12.4 and 2.12.5 there were 1 commits, 1 of them substantive:
Nothing published for this version
Nothing published for this version
This project publishes no release notes. Between 2.12.1 and 2.12.2 there were 2 commits, 2 of them substantive:
This project publishes no release notes. Between 2.12.1 and 2.12.2 there were 2 commits, 2 of them substantive:
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →