@dagnew005

Как изменить размер изображения, не теряя качества?

Здравствуйте.
Делаю так:
function create_img_gd( $imgfile, $imgthumb, $newwidth )
{
if (function_exists('imagecreate'))
{
$imginfo = getimagesize( $imgfile );

switch( $imginfo[2] ) {
case 1:
$type = IMG_GIF;
break;
case 2:
$type = IMG_JPG;
break;
case 3:
$type = IMG_PNG;
break;
case 4:
$type = IMG_WBMP;
break;
default:
return $imgfile;
}

switch( $type ) {
case IMG_GIF:
if (!function_exists("imagecreatefromgif")) return $imgfile;
$srcImage = imagecreatefromgif( $imgfile );
break;
case IMG_JPG:
if (!function_exists("imagecreatefromjpeg")) return $imgfile;
$srcImage = imagecreatefromjpeg( $imgfile );
break;
case IMG_PNG:
if(!function_exists("imagecreatefrompng")) return $imgfile;
$srcImage = imagecreatefrompng( $imgfile );
break;
case IMG_WBMP:
if (!function_exists("imagecreatefromwbmp")) return $imgfile;
$srcImage = imagecreatefromwbmp( $imgfile );
break;
default:
return $imgfile;
}

if ( $srcImage )
{
$srcWidth = $imginfo[0];
$srcHeight = $imginfo[1];
$ratioWidth = $srcWidth / $newwidth;
$destWidth = $newwidth;
$destHeight = $srcHeight / $ratioWidth;
$destImage = imagecreatetruecolor( $destWidth, $destHeight );

imagealphablending($destImage, true);
imagealphablending($srcImage, false);
imagecopyresized($destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);

switch( $type )
{
case IMG_GIF:
imagegif( $destImage, $imgthumb);
break;
case IMG_JPG:
imagejpeg( $destImage, $imgthumb);
break;
case IMG_PNG:
imagepng( $destImage, $imgthumb);
break;
case IMG_WBMP:
imagewbmp( $destImage, $imgthumb);
break;
}

imagedestroy($srcImage);
imagedestroy($destImage);
return $imgthumb;
} else {
return $imgfile;
}
} else {
return $imgfile;
}
}

теряется качество очень сильно
  • Вопрос задан
  • 2433 просмотра
Решения вопроса 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Из Вашего вопроса абсолютно не понятно как Вы используете этот код и что подразумевается под вопросами "теряется качество".

Если Вы сохраняете jpeg, то у функции imagejpeg есть 3й параметр quality по умолчанию равный 75.
Замените его хотя бы на 90 и радуйтесь.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
PafNutY
@PafNutY
Люблю кодить в своё удовольствие
Возьмите более менее нормальный инструмент ну или любой другой класс для работы с картинками, всёравно потом пригодится возможность изменения размера, нанесения лого и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы