Наверное, не то, что тебе нужно, но всё-таки…
Для создания превью писал свою функцию. Однако она ужимала фото пропорционально реальному размеру и вписывала его в рамки, переданные в качестве праметров в функцию. То есть, фото по большей своей стороне вписывалось в рамки, за пределы которого превью не имеет права выходить.
В функцию передаются некоторые "левые" параметры - UID юзера и папка назначения. На них можно не обращать внимание.
function resized_image ($image, $UID, $Xmax, $Ymax, $folder)
{
$type = $image ['type'];
$file = $image ['tmp_name'];
$name = $image ['name'];
if ($type=="image/png" || $type=="image/gif" || $type=="image/jpeg")
{
$arr = getimagesize($file);
$width = $arr[0];
$height = $arr[1];
if ($width <= $Xmax && $height <= $Ymax)
{
if ($type == "image/jpeg")
{
copy ($file, $folder."/".$UID.".jpg");
}
if ($type == "image/png")
{
copy ($file, $folder."/".$UID.".png");
}
if ($type == "image/gif")
{
copy ($file, $folder."/".$UID.".gif");
}
}
else
{
if ($width > $Xmax && (16/9) * $width > $height)
{
$W=$Xmax;
$H=($W * $height) / $width;
}
if ($height > $Ymax && (9/16) * $height > $width)
{
$H = $Ymax;
$W = ($width * $H) / $height;
}
if ($type == "image/png")
{
$dst=imagecreatefrompng($file);
$src=imagecreatetruecolor($W, $H);
imagecopyresampled ($src, $dst, 0, 0, 0, 0, $W, $H, $width, $height);
imagepng($src, $folder."/".$UID.".png");
}
if ($type == "image/gif")
{
$dst = imagecreatefromgif($file);
$src = imagecreatetruecolor($W, $H);
imagecopyresampled ($src, $dst, 0, 0, 0, 0, $W, $H, $width, $height);
imagejpeg($src, $folder."/".$UID.".gif");
}
if ($type == "image/jpeg")
{
$dst=imagecreatefromjpeg($file);
$src=imagecreatetruecolor($W, $H);
imagecopyresampled ($src, $dst, 0, 0, 0, 0, $W, $H, $width, $height);
imagejpeg($src, $folder."/".$UID.".jpg");
}
}
return true;
}
else return false;
}