Как на счет этого: требуется взять изображение любого размера и пропорционально изменить его размер (или увеличить), чтобы заполнить холст любых размеров.
Например, исходное изображение: 400 Вт x 600 ч, а размер эскиза долженбыть 100w x 225h - выходное изображение будет 100w x 225h, а изображения будут центрированы вертикально с шириной 100 (максимум) и высотой 150 (с верхней и нижней границей 37,5 пикселей)
Вотфункция
function resize_to_canvas($filename,$canvas_w=100,$canvas_h=225){
list($width, $height, $type) = getimagesize($filename);
$original_overcanvas_w = $width/$canvas_w;
$original_overcanvas_h = $height/$canvas_h;
$dst_w = round($width/max($original_overcanvas_w,$original_overcanvas_h),0);
$dst_h = round($height/max($original_overcanvas_w,$original_overcanvas_h),0);
$dst_image = imagecreatetruecolor($canvas_w, $canvas_h);
$background = imagecolorallocate($dst_image, 255, 255, 255);
imagefill($dst_image, 0, 0, $background);
$src_image = imagecreatefromjpeg($filename);
imagecopyresampled($dst_image, $src_image, ($canvas_w-$dst_w)/2, ($canvas_h-$dst_h)/2, 0, 0, $dst_w, $dst_h, $width, $height);
imagegif($dst_image, $filename);
imagedestroy($dst_image);}
Эта функция заменит исходный файл, но ее легко изменить, чтобы создать новое уменьшенное изображение.Просто измените имя файла на строку imagegif ($ dst_image, $ filename);