Intervention/image · error · InvalidArgumentException
Failed to create color from input "{input}"
Error message
Failed to create color from input "{input}" What it means
NamedColor::create() accepts only exact CSS color names backed by the NamedColor enum (about 140 values like 'red', 'aliceblue', 'navy'). The input is lowercased and passed to the enum's from(); an unknown value makes from() throw ValueError, which this method converts into an InvalidArgumentException echoing your input.
Source
Thrown at src/Colors/Rgb/NamedColor.php:171
case TURQUOISE = 'turquoise';
case VIOLET = 'violet';
case WHEAT = 'wheat';
case WHITE = 'white';
case WHITESMOKE = 'whitesmoke';
case YELLOW = 'yellow';
case YELLOWGREEN = 'yellowgreen';
/**
* Create new named color.
*
* @throws InvalidArgumentException
*/
public static function create(string $input): ColorInterface
{
try {
return self::from(strtolower($input));
} catch (TypeError | ValueError) {
throw new InvalidArgumentException('Failed to create color from input "' . $input . '"');
}
}
/**
* Create new named color or return null of creation fails.
*/
public static function tryCreate(string $input): ?ColorInterface
{
try {
return self::from(strtolower($input));
} catch (Error) {
return null;
}
}
/**
* {@inheritdoc}
*View on GitHub (pinned to 5598b9e397)
Solutions
- Use an exact CSS named color (check the NamedColor enum cases for the accepted list)
- For hex/rgb()/rgba() strings, do not use NamedColor::create; pass them to the driver's color decoding or build an Rgb\Color directly
- Validate the name first with NamedColor::tryFrom(strtolower($name)) and fall back to a default color
Example fix
// before
$color = NamedColor::create($userColor);
// after
$color = NamedColor::tryFrom(strtolower($userColor))
? NamedColor::create($userColor)
: NamedColor::create('white'); Defensive patterns
Strategy: type-guard
Validate before calling
$name = strtolower(trim($name));
if (NamedColor::tryFrom($name) === null) {
$name = 'white';
} Type guard
function isNamedColor(string $value): bool
{
return NamedColor::tryFrom(strtolower($value)) !== null;
} Try / catch
try {
$color = NamedColor::create($input);
} catch (\Intervention\Image\Exceptions\InvalidArgumentException $e) {
$color = NamedColor::create('white');
} Prevention
- Treat the NamedColor enum cases as the source of truth for accepted names
- Lowercase and trim user input before matching
- Route non-named formats (hex, rgb()) through the driver's color decoding instead
When it happens
Trigger: NamedColor::create('redd') (typo), NamedColor::create('grey') (British spelling, not a case), NamedColor::create('#ff0000') (hex is not a named color), or any string not present in the NamedColor enum cases.
Common situations: User- or CMS-supplied color names; expecting the full CSS color parser (hex, rgb(), hsl()) from a named-color-only API; localized color names.
Related errors
- Invalid cmyk() color syntax "{input}"
- Unable to parse HSL color from input "{input}"
- Invalid hsl() color syntax "{input}"
- Unable to parse HSV color from input "{input}"
- Number of color channels must be 3 or 4 for {class}
AI-assisted analysis of Intervention/image@5598b9e397 (2026-08-23).
Data as JSON: /api/errors/26e9fd4484340808.
Report an issue: GitHub.