drzippie / crop
Modern PHP library for intelligent image cropping with multiple algorithms
Requires
- php: >=8.3.0
- ext-imagick: *
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2025-07-15 19:06:10 UTC
README
This is a maintained fork of the original stojg/crop library, which was archived on April 30, 2021. This fork continues development and adds modern improvements.
Key enhancements in this fork:
- ✅ Modern PHP 8.3+ compatibility with strict typing
- ✅ Comprehensive test suite with PHPUnit 11+
- ✅ PHPStan level 8 compliance for type safety
- ✅ Modernized dependencies and compatibility
- ✅ Active maintenance and bug fixes
This is a small set of image croppers for automated cropping with intelligent algorithms.
Requirements
- PHP 8.3 or higher
- ImageMagick extension with sRGB colorspace (version 6.7.5-5 or higher)
Description
This project includes three intelligent image cropping algorithms:
CropCenter
This is the most basic of cropping techniques:
- Find the exact center of the image
- Trim any edges that is bigger than the targetWidth and targetHeight
CropEntropy
This class finds the a position in the picture with the most "energy" in it. Energy (or entropy) in images are defined by 'edginess' in the image. For example a image of the sky have low edginess and an image of an anthill has very high edginess.
Energy is in this case calculated like this
- Take the image and turn it into black and white
- Run a edge filter so that we're left with only edges.
- Find a piece in the picture that has the highest entropy (i.e. most edges)
- Return coordinates that makes sure that this piece of the picture is not cropped 'away'
CropBalanced
Crop balanced is a variant of CropEntropy where I tried to the cropping a bit more balanced.
- Dividing the image into four equally squares
- Find the most energetic point per square
- Finding the images weighted mean interest point for all squares
Usage
Basic Usage
use drzippie\crop\{CropCenter, CropEntropy, CropBalanced}; // Center-based cropping (fastest) $center = new CropCenter($filepath); $croppedImage = $center->resizeAndCrop($width, $height); $croppedImage->writeimage('assets/thumbs/cropped-center.jpg'); // Entropy-based cropping (intelligent edge detection) $entropy = new CropEntropy($filepath); $croppedImage = $entropy->resizeAndCrop($width, $height); $croppedImage->writeimage('assets/thumbs/cropped-entropy.jpg'); // Balanced cropping (weighted center of interest) $balanced = new CropBalanced($filepath); $croppedImage = $balanced->resizeAndCrop($width, $height); $croppedImage->writeimage('assets/thumbs/cropped-balanced.jpg');
Advanced Usage
use drzippie\crop\CropEntropy; // Create cropper with custom settings $crop = new CropEntropy(); $crop->setImage($imagickObject) ->setFilter(Imagick::FILTER_LANCZOS) ->setBlur(0.8) ->setAutoOrient(true); $result = $crop->resizeAndCrop(300, 200);
Installation
Install via Composer:
composer require drzippie/crop
Documentation
📖 Complete Documentation - GitHub Pages with full API reference and examples