Imagick allows you to easily add a gradient to an image.

// The gradient
$gradient = new Imagick();

// Create new Image with size x, size y, “gradient start – gradient end
$gradient->newPseudoImage( 930,20,”gradient:transparent-#838383″);

// $im would be the canvas or image you loaded before. This merges both, the image gradient at position x, position y
$im->compositeImage( $gradient, imagick::COMPOSITE_OVER, 0, 240 );

This can easily be transformed to create a reflection, by mirroring the original and applying the the gradient to the mirrored image.