Non so se c'è qualcosa di già pronto, se comunque il bordo bianco è "spesso" uguale su tutti e 4 i lati non è neanche troppo difficile creare una funzione ad hoc, un pò più complicato se ogni lato ha un eccedenza di bianco diversa.

Giusto per indirizzarti su come affronterei io il problema (cerca prima se c'è già qualche libreria pronta)

Intanto devi sapere le dimensioni dell'immagine
Codice PHP:
$arr getimagesize('immagine'); 
Tramite le librerie GD puoi ,con poche righe di codice, sapere il codice esadecimale di un determinato pixel
Codice PHP:
$x 0// Pixel sull'asse X
$y 0// Pixel sull'asse Y

$image imagecreatefromgif("test.gif");
$arr imagecolorat($image$x ,$y);

extract(imagecolorsforindex($image$arr));

$color sprintf('#%02X%02X%02X'$red$green$blue);

// echo $color; restituirà #FFFFFF se c'è un bordo bianco 
Ora tramite dei cicli non dovrebbe essere difficile trovare qual'è la prima "riga", partendo dall'alto, che non contiene solo bianco

Esempio di utilizzo
Codice PHP:
<?php
function getHEX($image$x$y)
{
    
$arr imagecolorat($image$x ,$y);
    
    
extract(imagecolorsforindex($image$arr));
    
    return 
sprintf('#%02X%02X%02X'$red$green$blue);
}


$image     imagecreatefromgif("test.gif");
$arr    getimagesize("test.gif");

$width    $arr[0];
$height    $arr[1];

for(
$y 0$y $height$y++)
{
    for(
$x 0$x $width$x++)
    {
        if(
getHEX($image$x$y) != "#FFFFFF"
            die(
"Altezza bordo bianco: {$y} pixel");
    }
    
}
?>
questo va bene se come detto i lati bianchi hanno lo stesso spessore.

dopo che sai quanto è il bordo bianco devi usare imagecopyresized() per tagliare l'immagine.

Questo giusto per indirizzarti, poi vedi un pò te