Skip to content
CAI
Software that uses CAICheck a score

Intervention/image

69.1

Adequate · 26 September 2026

25.4k

lines of production code

PHP

primary language

3

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a PHP image manipulation library that provides a unified API for decoding, analyzing, modifying, and encoding images across GD and Imagick backends. It supports a wide range of modern image formats and color spaces, including CMYK, HSL, HSV, and perceptually uniform Oklab/Oklch, while offering capabilities for palette extraction, geometric drawing, and typography. The architecture is built on a specialized driver system that allows for format-specific optimizations and robust handling of various input sources like files, streams, and data URIs.

How it got here

2013–2023 — Intervention Image v4 architecture and color system

38 changes.

This period focused on the comprehensive redesign of the Intervention Image library for version 4, introducing a modular, interface-driven architecture with specialized drivers for GD and Imagick. It established a robust, multi-colorspace system supporting RGB, CMYK, HSL, HSV, Oklab, and Oklch, alongside new geometry and typography components. The work also standardized development tooling and updated dependencies to PHP 8.3 and modern testing frameworks.

2024 — comprehensive test infrastructure and coverage

24 changes.

This period focused on establishing a robust testing foundation by adding extensive unit and feature tests for core image processing components, including color spaces, geometry, and driver implementations. It also introduced new utility traits to support driver specialization and source detection, alongside infrastructure updates like funding manifest declarations.

2025–2026 — OKLCH/OKLAB color space support and test expansion

9 changes.

This period focused on implementing support for the perceptually uniform OKLCH and OKLAB color spaces, including alpha channel handling and conversions. Comprehensive unit tests were added to cover these new color implementations, alongside existing color processing components, image source traits, and EXIF auto-orientation features.

Features

Add CMYK colorspace support

The library now supports the CMYK colorspace, allowing users to create, parse, and manipulate CMYK colors. This includes a new \Color\ class for handling Cyan, Magenta, Yellow, and Key (black) channels along with alpha transparency, and a \Colorspace\ class that enables conversion from RGB, HSL, HSV, Oklab, and Oklch colors into CMYK. Users can now import named colors and other color models into CMYK for printing-oriented workflows.

src/Colors/Cmyk · high confidence

Add HSL colorspace support with alpha channel and conversion capabilities

Users can now work with HSL (Hue, Saturation, Luminance) colors, including optional alpha transparency. The new \src/Colors/Hsl/Color\ and \Colorspace\ classes allow creating HSL colors from components or parsing them from strings, and support conversion to/from RGB, HSV, CMYK, Oklab, and Oklch colorspaces. The colorspace handles both 3-channel (HSL) and 4-channel (HSLA) inputs, normalizing missing alpha values to 1.

src/Colors/Hsl · high confidence

Add HSV color space support

Users can now create, parse, and manipulate colors in the HSV (Hue, Saturation, Value) color space. This change introduces the \Intervention\\Image\\Colors\\Hsv\\Color\ and \Colorspace\ classes, enabling the creation of HSV colors via static \create()\ and \parse()\ methods, access to individual channels (hue, saturation, value, alpha), and conversion to/from other supported color spaces like RGB and HSL.

src/Colors/Hsv · high confidence

Add Imagick-specific analyzers for image properties

The Imagick driver now includes specialized analyzers to retrieve image metadata, including colorspace, dimensions (width/height), resolution, ICC profile, and pixel colors. These new classes extend the generic analyzer base classes and implement the specialized interface to leverage ImageMagick's native methods for accurate data extraction.

src/Drivers/Imagick/Analyzers · high confidence

Add OKLCH and OKLAB color space support

Users can now create, parse, and manipulate colors in the perceptually uniform OKLCH and OKLAB color spaces. This adds new Color and Colorspace classes for both spaces, enabling direct construction via lightness/chroma/hue (OKLCH) or lightness/a/b (OKLAB) values, parsing from CSS-style string notations (e.g., oklch(...) and oklab(...)), and conversion to/from existing spaces like RGB, HSL, HSV, CMYK, and each other.

src/Colors/Oklab · high confidence

Add Oklch color channel definitions

The library now includes the channel components for the Oklch colorspace. New classes have been added for Lightness (0–1), Chroma (-0.4–0.4), Hue (0–360), and Alpha, providing the underlying structure for Oklch color representation.

src/Colors/Hsv/Channels, src/Colors/Oklch/Channels · high confidence

Add specialized decoders for native image inputs

The library now includes dedicated decoder classes to handle native PHP image objects directly. Specifically, \ImageObjectDecoder\ allows decoding from \ImageInterface\ instances, and \ColorObjectDecoder\ allows decoding from \ColorInterface\ instances. These new decoders extend the existing \AbstractDecoder\ base class and implement the standard \supports()\ and \decode()\ methods, enabling the library to process these object types as valid input sources.

src/Decoders · high confidence

Added funding manifest URLs

The .well-known/funding-manifest-urls file has been created to declare funding sources for the project, pointing to https://intervention.io/funding.json and https://image.intervention.io/funding.json.

.well-known · high confidence

Complete interface redesign for Intervention Image v4

The library has introduced a comprehensive set of new interfaces in src/Interfaces, replacing the previous architecture to support version 4. This includes dedicated contracts for image manipulation (ImageInterface, ModifierInterface), color management (ColorInterface, ColorspaceInterface, ColorChannelInterface), and animation handling (AnimationFactoryInterface, FrameInterface, CoreInterface). New capabilities are exposed through interfaces for decoders/encoders (DecoderInterface, EncoderInterface), data URIs (DataUriInterface), and palette extraction (PaletteInterface). The refactoring also introduces specialized interfaces for font processing (FontInterface, FontProcessorInterface), resolution handling (ResolutionInterface), and driver specialization (SpecializableInterface, SpecializedInterface), establishing a more modular and type-safe foundation for image operations.

src/Interfaces · high confidence

Establishes standardized development environment and tooling configuration

The project now includes a complete set of configuration files to standardize the development workflow. This introduces a Docker-based environment (Dockerfile, docker-compose.yml, entrypoint.sh) for running tests, static analysis, and coding standards checks. It also adds \.editorconfig\ for consistent code formatting, \.gitignore\ and \.gitattributes\ for repository hygiene, and dedicated configuration files for PHPUnit 10, PHPStan (level 6), and PHP\_CodeSniffer (PSR-12). Additionally, an \AGENTS.md\ guide is provided to assist developers and AI agents in understanding the project's coding conventions and build commands.

(repo-wide) · high confidence

HSL color model channel definitions added

The HSL color model now includes defined channel classes for Hue (0–360), Saturation (0–100), Luminance (0–100), and Alpha, enabling users to work with HSL colors that support transparency.

src/Colors/Hsl/Channels · high confidence

Imagick driver now supports decoding from multiple input types

The Imagick decoder has been refactored to explicitly support decoding images from various input sources, including base64 strings, data URIs, binary strings, file paths, SplFileInfo objects, PHP streams, and existing Imagick or EncodedImage objects. This change introduces dedicated decoder classes for each input type, improving type safety and error handling while ensuring consistent EXIF extraction and colorspace conversion (e.g., GRAY/YCbCr to sRGB) across all decoding paths.

src/Drivers/Imagick/Decoders · high confidence

Imagick driver now supports encoding to AVIF, BMP, HEIC, ICO, JXL, JPEG 2000, and TIFF

The Imagick driver in src/Drivers/Imagick/Encoders has been expanded with new specialized encoder classes for AVIF, BMP, HEIC, ICO, JPEG 2000, JXL, and TIFF, in addition to updated implementations for GIF, JPEG, PNG, and WebP. Users can now save images in these additional formats using the Imagick backend, with support for format-specific options such as interlacing for GIF and PNG, progressive encoding for JPEG, lossless WebP at quality 100, and metadata stripping where applicable.

src/Drivers/Imagick/Encoders · high confidence

Introduction of new core domain classes and enums

This change introduces a suite of new foundational classes and enums that define the library's internal architecture. Key additions include the \Alignment\ enum for handling image positioning with flexible string parsing, the \Color\ class for parsing and creating colors across multiple colorspaces (RGB, CMYK, HSL, HSV, OKLAB, OKLCH), and the \Config\ class for managing library settings like background color and animation decoding. The update also adds \Collection\ for data management, \DataUri\ for handling data URI schemes, \EncodedImage\ and \File\ for managing encoded image data and file streams, and enums like \Format\, \FileExtension\, and \MediaType\ to standardize format identification. Additionally, \AnimationFactory\ is introduced to facilitate the creation of animated images, and \Fraction\ provides utility for ratio-based calculations.

src · high confidence

New GD-specific encoders for AVIF, BMP, GIF, JPEG, PNG, and WebP

This change introduces dedicated GD driver encoder classes for six image formats: AVIF, BMP, GIF, JPEG, PNG, and WebP. These new encoders implement format-specific logic such as interlacing for PNG and GIF, progressive encoding for JPEG, lossless WebP support, indexed color reduction for PNG, and animated GIF handling via the intervention/gif library. Users can now encode images to these formats using the GD driver with full access to format-specific options previously unavailable or generic.

src/Drivers/Gd/Encoders · high confidence

New RGB color space implementation with named color support

The RGB color space has been re-implemented with a new architecture that includes dedicated channel classes (Red, Green, Blue, Alpha) and a comprehensive list of named CSS colors. Users can now create RGB colors using integer channel values or specific channel objects, and the \Color::parse()\ method supports parsing from hex strings, named colors (e.g., 'red', 'aliceblue'), and functional notation. The \Colorspace\ class handles conversions from other color spaces (CMYK, HSL, HSV, Oklab, Oklch) into RGB, and the \NamedColor\ enum provides a type-safe way to access standard color names. The \Color::toHex()\ method now optionally includes the alpha channel in the output if the color is transparent, and \Color::toString()\ outputs the RGB values with a slash-separated alpha channel when transparency is present.

src/Colors/Rgb · high confidence

New Resizer tool for image dimension manipulation

A new Resizer class has been added to the Geometry Tools namespace, providing a fluent interface for resizing images. Users can now specify target dimensions via static factory methods (e.g., \to()\, \toWidth()\, \toHeight()\) or by passing a \SizeInterface\ object. The tool supports standard resizing as well as a 'resize down' mode that ensures the output dimensions do not exceed the original image size, handling proportional calculations automatically.

src/Geometry/Tools · high confidence

New color palette extraction and theme generation capabilities

Users can now extract color palettes from images using the new ColorExtractor, which supports popular and dominant color analysis, and generate color themes (such as Vibrant Muted) from those palettes. This change introduces a new color architecture with AbstractColor, AbstractColorChannel, and specific channel types (Alpha, Float, Integer) to handle color data, along with a Palette class for managing color bins and quantization, and a Profile class for handling ICC profiles.

src/Colors · high confidence

New fluent factory API for drawing geometric shapes

This location introduces a new set of factory classes (BezierFactory, CircleFactory, EllipseFactory, LineFactory, PolygonFactory, RectangleFactory) and a central Drawable facade in src/Geometry/Factories. These classes provide a fluent, builder-style interface for creating and configuring geometric shapes (e.g., setting size, position, color, and border) before they are drawn. This replaces or supplements previous direct instantiation patterns, allowing users to construct complex drawable objects with chained method calls.

src/Geometry/Factories · high confidence

New geometry classes for drawing shapes and points

The src/Geometry directory now includes new classes for creating and manipulating geometric shapes: Bezier, Circle, Ellipse, Line, Pixel, Point, Polygon, and Rectangle. These classes implement the DrawableInterface and provide methods for positioning, sizing, and adjusting shapes. The Point class supports iteration and rotation, while the Rectangle class extends Polygon and implements SizeInterface for width and height management. The Pixel class extends Point to include background color information.

src/Geometry · high confidence

New image analyzers for palette, dimensions, and pixel data

The src/Analyzers directory now includes new analyzer classes for extracting image metadata and color information. Users can analyze dominant and popular color palettes using the DominantPaletteAnalyzer (which employs K-means clustering in Oklab space) and PopularPaletteAnalyzer (which counts color frequency with quantization). Additionally, new analyzers allow retrieving the image's colorspace, width, height, resolution, and ICC profile, as well as extracting specific pixel colors via PixelColorAnalyzer and PixelColorsAnalyzer.

src/Analyzers · high confidence

New image processing traits for driver specialization, stream handling, and source detection

This change introduces a suite of new traits in the src/Traits directory that provide core capabilities for the image library. CanBeDriverSpecialized enables objects to be specialized for specific drivers by managing driver instances and caching constructor parameters. CanBuildStream allows converting various data types (null, strings, resources) into PHP stream resources. CanDetectImageSources adds logic to identify input types, including strict base64 validation, binary data detection, and file path parsing. CanParseFilePath provides robust validation for file paths, ensuring directories and files exist and are readable. CanResolveDriver simplifies the instantiation of driver classes from strings or existing instances. CanHashColor and CanConvertRange offer utility functions for color hashing and value range conversion.

src/Traits · high confidence

New traits for background color and border configuration

Added the HasBackgroundColor and HasBorder traits to the geometry traits namespace. HasBackgroundColor provides methods to set, retrieve, and check for a background color (accepting strings or ColorInterface objects). HasBorder introduces functionality to configure border size and color, including validation that ensures border size is non-negative, and methods to check if a border is active.

src/Geometry/Traits · high confidence

Support for HSL/HSLA string parsing with alpha channel and flexible whitespace

The library now includes a dedicated decoder for HSL and HSLA color strings, enabling users to parse inputs like 'hsl(120, 50%, 50%)' and 'hsla(120, 50%, 50%, 0.5)'. This change adds support for the alpha channel in HSLA notation and allows flexible whitespace within the functional color syntax (e.g., spaces around commas or the slash separator). The decoder strictly validates the input format and throws an exception for invalid syntax.

src/Colors/Hsl/Decoders · high confidence

Support for parsing HSV/HSB color strings

Users can now define colors using the functional \hsv()\ or \hsb()\ string notation (e.g., \hsv(120, 50%, 50%)\ or \hsb(120, 50%, 50%)\). The new \StringColorDecoder\ in the HSV module parses these strings, supporting optional \deg\ units for hue, flexible spacing, and an optional alpha channel for transparency.

src/Colors/Hsv/Decoders · high confidence

Support for parsing oklab() color strings

Users can now decode color definitions provided as oklab() strings. The new StringColorDecoder in the Oklab namespace recognizes the oklab() syntax, parses the lightness (L), a, and b channel values (supporting both decimal and percentage formats), and optionally handles an alpha channel. This enables the library to convert string-based oklab color specifications into internal color objects.

src/Colors/Cmyk/Decoders, src/Colors/Oklab/Decoders, src/Colors/Oklch/Decoders · high confidence

Behavioural changes

Add alpha channel support to Oklab color space

The Oklab color space implementation now includes an Alpha channel, allowing users to manipulate transparency alongside the existing Lightness, A, and B channels. This change introduces new channel classes (Alpha, A, B, Lightness) within the Oklab namespace, enabling full RGBA-style color representation in Oklab.

src/Colors/Oklab/Channels · high confidence

Add specialized Gd analyzers for image properties

Introduced new specialized analyzer classes for the Gd driver (ColorspaceAnalyzer, HeightAnalyzer, PixelColorAnalyzer, PixelColorsAnalyzer, ResolutionAnalyzer, and WidthAnalyzer) that extend the generic analyzer base classes. These implementations provide driver-specific logic for retrieving image metadata, including a fix in ResolutionAnalyzer to correctly read resolution from image origins (JFIF, EXIF, PNG PHYs) when GD returns default values, and improved error handling in PixelColorAnalyzer for out-of-bounds pixel access.

src/Drivers/Gd/Analyzers · high confidence

CMYK color channel definitions restored

The CMYK color space implementation has been restored with dedicated channel classes (Cyan, Magenta, Yellow, Key, and Alpha) located in the src/Colors/Cmyk/Channels directory. Cyan defines the valid range (0–100), while Magenta, Yellow, and Key inherit this behavior, and Alpha extends the base AlphaChannel. This change re-enables CMYK color support that was previously removed.

src/Colors/Cmyk/Channels · high confidence

GD driver decoders refactored to support new input types and improved error handling

The GD driver's image decoding process has been restructured into a specialized hierarchy of decoders (AbstractDecoder, BinaryImageDecoder, FilePathImageDecoder, StreamImageDecoder, etc.) to handle various input sources more robustly. Users can now decode images from a wider range of inputs including GdImage objects, SplFileInfo instances, DataUri objects, and PHP streams, in addition to binary data and file paths. The refactoring introduces stricter type validation, better MIME type detection using finfo with getimagesize fallback, and more descriptive exception messages. GIF decoding now supports animated images when configured, and EXIF data extraction is properly handled for JPEG and TIFF formats. Auto-orientation is applied based on configuration settings.

src/Drivers/Gd/Decoders · high confidence

GD driver implementation refactored with new core components

The GD driver has been restructured to use dedicated classes for image manipulation: a new Cloner handles image duplication and background blending, a ColorProcessor manages RGB/alpha conversion between the library's color model and GD's integer format, and a FontProcessor standardizes text rendering metrics. The Core class now explicitly manages frame collections and metadata, while the Driver itself enforces health checks and supports JPEG, PNG, GIF, WebP, AVIF, and BMP formats.

src/Drivers/Gd · high confidence

GD driver modifiers now use specialized implementations

The GD driver's image modifiers (such as Blur, Brightness, Crop, Resize, and various drawing tools) have been refactored to use dedicated classes in src/Drivers/Gd/Modifiers that implement SpecializedInterface. This change allows the GD driver to apply image effects using native PHP GD functions (like imagefilter and imagecopyresampled) directly, rather than relying on generic fallback logic, resulting in more efficient and driver-specific image processing.

src/Drivers/Gd/Modifiers · high confidence

Imagick driver modifiers rewritten with new architecture

The Imagick driver's image modifiers (e.g., Blur, Brightness, Colorize, Contain, Cover, Crop, Draw\*, Fill, Flip, Gamma, Grayscale, Insert, Invert) have been completely rewritten to align with a new driver architecture. Each modifier now extends a generic base class and implements the specialized interface, iterating over all frames to apply changes via native Imagick methods. This change ensures consistent behavior across modifiers, improves handling of animated images, and fixes several existing bugs (e.g., contrast lifting, alpha channel preservation, and drawing artifacts).

src/Drivers/Imagick/Modifiers · high confidence

Imagick driver refactored with new architecture and default settings

The Imagick driver has been completely rewritten to use a new internal architecture, introducing dedicated classes for color processing (ColorProcessor), font handling (FontProcessor), and core image management (Core). This change standardizes default image settings, specifically setting the resolution to 72 ppi and configuring the background color, which may affect how newly created or manipulated images are rendered. The driver now also exposes its version via a dedicated method and implements stricter type handling for frame disposal and animation delays.

src/Drivers/Imagick · high confidence

New dedicated decoders for hex, named, and RGB string colors

The library now uses specific decoder classes in the \src/Colors/Rgb/Decoders\ directory to handle string-based color inputs. \HexColorDecoder\ parses hexadecimal formats (including shorthand and alpha), \NamedColorDecoder\ resolves HTML color names by delegating to hex decoding, and \StringColorDecoder\ parses functional \rgb()\ and \rgba()\ notations, supporting whitespace variations and percentage-based alpha values. This refactoring centralizes parsing logic into distinct, type-hinted components that implement the \DecoderInterface\.

src/Colors/Rgb/Decoders · high confidence

New encoder architecture with dedicated format classes and auto-detection

The encoder system has been restructured to use dedicated classes for each image format (Avif, Bmp, Gif, Heic, Ico, Jpeg2000, Jpeg, Jxl, MediaType, Png, Tiff, Webp) and new auto-detection encoders (AutoEncoder, FileExtensionEncoder, FilePathEncoder, FormatEncoder). Users can now encode images by explicitly specifying a format, by letting the system auto-detect the format from a file path or extension, or by using the media type. Specific encoders like JpegEncoder and PngEncoder now support additional options such as progressive encoding and interlacing, while others like AvifEncoder, HeicEncoder, and JxlEncoder support quality and EXIF stripping options.

src/Encoders · high confidence

Refactor RGB channel implementation to use strict types and base classes

The RGB color channel components (Red, Green, Blue, Alpha) have been refactored to extend specific base classes (IntegerColorChannel and AlphaChannel) and enforce strict typing. The Red channel now explicitly defines its value range (0–255) via min() and max() methods, while the Alpha channel delegates to the shared AlphaChannel interface. This change standardizes how RGB channel values are represented and validated internally.

src/Colors/Rgb/Channels · high confidence

Refactored driver architecture with new abstract base classes and specialization system

The driver subsystem has been restructured to improve code organization and extensibility. New abstract base classes (AbstractDecoder, AbstractDriver, AbstractEncoder, AbstractFontProcessor, AbstractFrame) now provide shared implementations for common tasks like GIF detection, EXIF extraction, base64 decoding, and text block wrapping. A new specialization system using Specializable, SpecializableAnalyzer, SpecializableDecoder, SpecializableEncoder, and SpecializableModifier classes enables drivers to provide optimized implementations for specific operations. The AbstractDriver now handles image and color decoding through dedicated methods, while the font processor implements text wrapping and alignment logic. This refactoring centralizes duplicate code and establishes a clearer separation of concerns between generic driver functionality and driver-specific optimizations.

src/Drivers · high confidence

Refactored image modifiers to a new specializable architecture

The modifier classes in src/Modifiers have been completely rewritten to extend the new SpecializableModifier base class, shifting the processing logic from the modifiers themselves to specialized drivers. This change introduces stricter input validation (throwing InvalidArgumentException for invalid levels, sizes, or positions), standardizes color handling via the driver's decodeColor method, and renames several classes and methods (e.g., pad() to containDown(), place() to insert()) to improve consistency. New modifiers like DrawBezierModifier, DrawPolygonModifier, and ResizeCanvasRelativeModifier have been added, while existing ones like ContainModifier and CropModifier now explicitly handle background colors and alignment pivots through the new driver-based system.

src/Modifiers · high confidence

Refactored typography system with new Font, TextBlock, and Line classes

The typography component has been restructured into a new object-oriented architecture. The Font class now manages font properties (size, color, alignment, stroke) and implements the FontInterface, while the FontFactory provides a fluent builder for creating font instances. Text rendering is now handled by the TextBlock class, which manages collections of Line objects. Each Line object represents a single line of text, handling word segmentation for different languages (including CJK and Thai) and tracking position. This change replaces the previous monolithic text writing approach with a more modular system for handling multi-line text, alignment, and wrapping.

src/Typography · high confidence

Reorganized exception hierarchy with new specific exception classes

The exception handling structure in src/Exceptions has been reorganized to provide a more granular and typed error reporting system. A new base abstract class, ImageException, now implements ExceptionInterface and serves as the root for the hierarchy. Specific exception classes have been introduced or restructured, including EncoderException and DecoderException (extending DriverException), as well as specialized decoders like ColorDecoderException and ImageDecoderException. Filesystem-related errors are now grouped under FilesystemException, with specific subclasses for DirectoryNotFoundException, FileNotFoundException, FileNotReadableException, FileNotWritableException, and StreamException. Other new or restructured exceptions include AnalyzerException, ArgumentException, InvalidArgumentException, LogicException, MissingDependencyException, ModifierException, NotSupportedException, RuntimeException, and StateException, all extending appropriate parent classes to improve type safety and debugging for users.

src/Exceptions · high confidence

Test coverage

Add SVG test resource; Added test data providers for color, image, and driver inputs; Added test infrastructure and helper classes; Added test traits for detecting progressive JPEG and PNG format details; Added tests for EXIF auto-orientation handling; Added tests for PNG/GIF conversion transparency and PNG crop/resize operations in the Imagick driver; Added unit tests for CMYK color components; Added unit tests for FileExtension, Format, and MediaType encoders; Added unit tests for GD driver modifiers; Added unit tests for GD encoder formats; Added unit tests for Gd decoder components; Added unit tests for Geometry classes; Added unit tests for HSL and HSV channel classes; Added unit tests for HSL and HSV string color decoders; Added unit tests for Imagick analyzer components; Added unit tests for Imagick image decoders; Added unit tests for RGB color decoders; Added unit tests for Typography components; Added unit tests for color processing components; Added unit tests for core image processing components; Added unit tests for driver base classes and specializable components; Added unit tests for geometry factory classes; Added unit tests for image modifier classes; Added unit tests for image source detection and file path parsing traits; Added unit tests for palette analyzers and color themes; Added unit tests for the GD driver implementation; Added unit tests for the Imagick driver components; Added unit tests for the Oklab color space implementation; Added unit tests for the Oklch colorspace implementation.

Dependencies

Drops PHP 8.1/8.2 support and updates core dependencies

The package now requires PHP 8.3 or higher, dropping support for earlier versions. It also updates its core image processing dependency to intervention/gif version 5, upgrades the development testing stack to PHPUnit 12 and PHPStan 2, and introduces the intervention/coding-standard for code quality checks.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 47 → 69 (+21.9)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 97 (-3.0)
  • Architecture 94 → 93 (-0.6)
  • Maturity 59 → 59 (-0.0)
  • Readiness 18 → 62 (+43.5)
  • Security 79 → 94 (+14.5)

Resolved (13)

  • Coverage not measured — test suite did not build
  • Dimension evaluation failed
  • Duplicated block (10 lines × 2) (src/Colors/Hsl/Colorspace.php)
  • Duplicated block (7 lines × 2) (src/Drivers/Gd/Modifiers/DrawBezierModifier.php)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Low IaC: DS-0026 (Dockerfile)
  • No exposed public API
  • No tests found
  • Test reliability not included

New (96)

  • Boundary-crossing change coupling: Color.php ↔ ColorInterface.php (src/Colors/Cmyk/Color.php)
  • Boundary-crossing change coupling: Color.php ↔ ColorInterface.php (src/Colors/Oklch/Color.php)
  • Boundary-crossing change coupling: Color.php ↔ ColorInterface.php (src/Colors/Rgb/Color.php)
  • Boundary-crossing change coupling: ImageInterface.php ↔ FillTransparentAreasModifier.php (src/Interfaces/ImageInterface.php)
  • Boundary-crossing change coupling: TextModifier.php ↔ DriverInterface.php (src/Drivers/Imagick/Modifiers/TextModifier.php)
  • Change coupling: BinaryImageDecoder.php ↔ FilePathImageDecoder.php (src/Drivers/Gd/Decoders/BinaryImageDecoder.php)
  • Change coupling: ContainModifier.php ↔ ResizeCanvasModifier.php (src/Modifiers/ContainModifier.php)
  • Change coupling: CoverModifier.php ↔ ResizeModifier.php (src/Drivers/Gd/Modifiers/CoverModifier.php)
  • Change coupling: CoverModifier.php ↔ ResizeModifier.php (src/Drivers/Gd/Modifiers/CoverModifier.php)
  • Change coupling: CropModifier.php ↔ ReduceColorsModifier.php (src/Drivers/Gd/Modifiers/CropModifier.php)
  • Change coupling: DrawPixelModifier.php ↔ DrawPolygonModifier.php (src/Drivers/Imagick/Modifiers/DrawPixelModifier.php)
  • Change coupling: DrawPixelModifier.php ↔ DrawRectangleModifier.php (src/Drivers/Imagick/Modifiers/DrawPixelModifier.php)
  • Change coupling: DrawPolygonModifier.php ↔ DrawRectangleModifier.php (src/Drivers/Gd/Modifiers/DrawPolygonModifier.php)
  • Change coupling: DrawPolygonModifier.php ↔ DrawRectangleModifier.php (src/Drivers/Imagick/Modifiers/DrawPolygonModifier.php)
  • Change coupling: FileExtensionEncoder.php ↔ MediaTypeEncoder.php (src/Encoders/FileExtensionEncoder.php)
  • Change-coupling hub: ContainModifier.php → CropModifier.php, FillTransparentAreasModifier.php, ReduceColorsModifier.php (src/Drivers/Gd/Modifiers/ContainModifier.php)
  • Change-coupling hub: DrawEllipseModifier.php → DrawPolygonModifier.php, DrawRectangleModifier.php, DrawLineModifier.php, DrawRectangleModifier.php (src/Drivers/Gd/Modifiers/DrawEllipseModifier.php)
  • Change-coupling hub: DrawEllipseModifier.php → DrawRectangleModifier.php, DrawLineModifier.php, DrawPixelModifier.php, DrawPolygonModifier.php, DrawRectangleModifier.php (src/Drivers/Imagick/Modifiers/DrawEllipseModifier.php)
  • Change-coupling hub: DrawLineModifier.php → DrawEllipseModifier.php, DrawPixelModifier.php, DrawPolygonModifier.php, DrawRectangleModifier.php, DrawEllipseModifier.php, DrawRectangleModifier.php (src/Drivers/Gd/Modifiers/DrawLineModifier.php)
  • Change-coupling hub: DrawLineModifier.php → DrawPixelModifier.php, DrawPolygonModifier.php, DrawRectangleModifier.php (src/Drivers/Imagick/Modifiers/DrawLineModifier.php)
  • …and 76 more

Changes since last survey

  • 20 commits — 16 feature/other, 4 fixes

By area

  • src/Drivers — 6 commits
  • tests/Unit — 6 commits
  • (root) — 2 commits
  • src/EncodedImage.php — 2 commits
  • tests/resources — 2 commits
  • (repo) — 1 commit
  • src/Colors — 1 commit

Notable commits

  • fix: Fix Imagick grayscale flattening saturated colors (#1516)
  • fix: Fix bug when decoding with Imagick and discarding animations (#1508)
  • fix: Fix reading unicode file paths (#1530)
  • fix: Fix transparency bug in GD driver TrimModifier (#1512)
  • change: Adjust StripMetaModifier to keep possible uhd gain map (#1528)
  • change: Apply Imagick colorspace change to every frame (#1517)
  • change: Color Palette Extraction (#1509)
  • change: Detach Imagick frame when converting to image (#1518)
  • change: Externalize coding standard (#1526)
  • change: Implement JsonSerializable for related classes (#1513)
  • change: Keep the ICC profile of a stripped Imagick image in PNG output (#1524)
  • change: Merge branch 'develop'
  • change: Orient every frame of an animated Imagick image (#1519)
  • change: Refactor test
  • change: Refine coding standard (#1525)
  • change: Remove JsonSerializable from EncodedImage (#1522)
  • change: Remove JsonSerializable from EncodedImage (#1522)
  • change: Remove gray ICC profile when relabeling to sRGB (#1533)
  • change: Remove test
  • change: Remove unused code

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

Intervention/image was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 26 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 4ae327f8d2903a3d512ea9b4a3f260590506e8ef — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-a9cd699f3cd5.