Черный фон по умолчанию, вам просто нужно сначала установить цвет фона нового изображения на белый.
//set background colour white before copying
$white = imagecolorallocate($image_p, 255, 255, 255);
imagefill($image_p, 0, 0, $white);
imagecopyresampled($image_p,$image,0,0,0,0,$thumb_w,$thumb_h,$filewidth,$fileheight);
$imageformat($image_p, $filepath_thumb);//thumb folder
Кроме того, $ dst_img, похоже, не используется.
Центрирование (непроверенная, но достаточно простая математика):
$xOffset = (imagesx($p_image)-$thumb_w) / 2;
$yOffset = (imagesy($p_image)-$thumb_h) / 2;
imagecopyresampled($image_p,$image,$offsetX,$offsetY,0,0,$thumb_w,$thumb_h,$filewidth,$fileheight);
Если вы знаете, какое измерение не соответствует новому измерению миниатюр, это можно упростить.