Вам нужно будет рассчитать соответствующие координаты для исходной области, которую вы хотите скопировать:
imagecopyresampled($tmp,$src,0,0,[THIS VALUE],[THIS VALUE],$newwidth,$newheight, [THIS VALUE],[THIS VALUE]);
На данный момент вы берете область от 0,0 (x, y) до ширины, высоты(x, y) исходной области и попытайтесь ограничить ее размером 150x150.
вам нужно будет рассчитать, какая из ширины и высоты является самой большой, и обрезать ее, а также убедиться, что это соотношениетак же, как ваше полученное изображение (в вашем случае, соотношение составляет 1,0 из-за 150x150).
В вашем примере, где ширина равна 1050, а высота равна 317 пикселей, поэтому вы хотите, чтобы часть исходного изображения была 317x317 (коэффициент 1,0), вам необходимо:
subtract 317 from 1050 = 733; // this is the excessive area for both sides
divide by 2 =~ 366; // to get the excessive area for one side
Сейчас, используйте первую координату x 366, чтобы начать 366 пикселей слева.Используйте вторую координату x 1050 - 366, начиная с 366 пикселей справа.
Таким образом, ваш пример должен быть (просто угадать здесь):
imagecopyresampled($tmp,$src,0,0,366,0,$newwidth,$newheight, $width - 366, 0);
Вам, конечно, понадобится некоторая логика, чтобы вычислить это правильно для любого другого размера.