Royal Flash
-=MaestrO=-
Изменение размера изображения на лету возможно только с сильной потерей в качестве?
Взял готовый пример, код ниже:
$max_width = 200;
$max_height = 200;
$image = "image.jpg";
$size = GetImageSize($image);
$width = $size[0];
$height = $size[1];
$x_ratio = $max_width / $width;
$y_ratio = $max_height / $height;
if ( ($width <= $max_width) && ($height <= $max_height) )
{
$tn_width = $width;
$tn_height = $height;
}
else if ( ($x_ratio * $height) < $max_height)
{
$tn_height = ceil($x_ratio * $height);
$tn_width = $max_width;
}
else
{
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}
$src = ImageCreateFromJpeg($image);
$dst = ImageCreate($tn_width,$tn_height);
ImageCopyResized($dst, $src, 0, 0, 0, 0, $tn_width,$tn_height,$width,$height);
header("Content-type: image/jpeg");
ImageJpeg($dst, null, -1);
ImageDestroy($src);
ImageDestroy($dst);
Все работает, вот только качество уменьшенной картинки оставляет желать лучшего... ImageJpeg($dst, null, -1) -
-1, я так понял, это и есть качество отображения, вот только не ясно, какое число соответствует лучшему качеству. И даже если вообще не сжимать картинку, а просто прогнать ее через этот скрипт качество заметно ухудшится.
Собственно вопрос: изменение размера изображения на лету возможно только с сильной потерей в качестве, или если это не так, подскажите как уменьшить размер картинки с минимальными потерями в качестве?
С уважением, Royal Flash
Взял готовый пример, код ниже:
$max_width = 200;
$max_height = 200;
$image = "image.jpg";
$size = GetImageSize($image);
$width = $size[0];
$height = $size[1];
$x_ratio = $max_width / $width;
$y_ratio = $max_height / $height;
if ( ($width <= $max_width) && ($height <= $max_height) )
{
$tn_width = $width;
$tn_height = $height;
}
else if ( ($x_ratio * $height) < $max_height)
{
$tn_height = ceil($x_ratio * $height);
$tn_width = $max_width;
}
else
{
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}
$src = ImageCreateFromJpeg($image);
$dst = ImageCreate($tn_width,$tn_height);
ImageCopyResized($dst, $src, 0, 0, 0, 0, $tn_width,$tn_height,$width,$height);
header("Content-type: image/jpeg");
ImageJpeg($dst, null, -1);
ImageDestroy($src);
ImageDestroy($dst);
Все работает, вот только качество уменьшенной картинки оставляет желать лучшего... ImageJpeg($dst, null, -1) -
-1, я так понял, это и есть качество отображения, вот только не ясно, какое число соответствует лучшему качеству. И даже если вообще не сжимать картинку, а просто прогнать ее через этот скрипт качество заметно ухудшится.
Собственно вопрос: изменение размера изображения на лету возможно только с сильной потерей в качестве, или если это не так, подскажите как уменьшить размер картинки с минимальными потерями в качестве?
С уважением, Royal Flash