This will do the trick:
$im=imagecreatefromjpeg ($imgPath);
$width=ImageSX($im); $height=ImageSY($im); $ratio=16/9;
$width_out=$width; $height_out=$height;
if ($height_out*$ratio<$width_out) {$height_out=floor($width_out/$ratio);} else {$width_out=floor($height_out*$ratio);}
$left=round(($width_out-$width)/2);
$top=round(($height_out-$height)/2);
$image_out = imagecreatetruecolor($width_out,$height_out);
$bg_color = ImageColorAllocate ($image_out, 0, 0, 0);
imagefill($image_out,0,0,$bg_color);
imagecopy($image_out, $im, $left, $top, 0, 0, $width,$height);
imagejpeg($image_out);
How it works: you create the $im container, and check for width and height.
After this, the script checks which side is smaller than the other (multiplied / divided by the ratio) and adjust the output size.
Calculate where the original image should be placed (center alignment) by dividing the difference between the original and the output image dimensions by 2.
Copy over the original image at the given position
Output, done.