PHP GD Auto Crop Image – Four Sides w/ Threshold

Cats: php

I don’t know why you can’t set the threshold for the four sides filter (IMG_CROP_SIDES) in PHP’s imagecropauto so here’s how to do it manually using the IMG_CROP_THRESHOLD filter instead.

$threshold = .5;

$im = imagecreatefromjpeg('somefile.jpg');

$width = imagesx($im);
$height = imagesy($im);

$arr = [
	[0,0],
	[$width-1,0],
	[0,$height-1],
	[$width-1,$height-1],
];

$red = 0;
$green = 0;
$blue = 0;

// grab the colours from all four corners
foreach( $arr as $arr2 ) {
    $thisColor = imagecolorat($im, $arr2[0], $arr2[1]); 

	$rgb = imagecolorsforindex($im, $thisColor); 
	$red += round(round(($rgb['red'] / 0x33)) * 0x33); 
	$green += round(round(($rgb['green'] / 0x33)) * 0x33); 
	$blue += round(round(($rgb['blue'] / 0x33)) * 0x33); 
}

// and average them
$red /= 4;
$green /= 4;
$blue /= 4;

$newColor = imagecolorallocate($im, $red, $green, $blue);			

$cropped = imagecropauto($im, IMG_CROP_THRESHOLD, $threshold, $newColor);

imagejpg($cropped, 'somefile.cropped.jpg');

imagedestroy($im);
imagedestroy($cropped);