2013-06-25 7 views
-2

Мне нужно изменить размер изображений с помощью PHP. Но ... качество очень, очень плохо !! (Смотрите на фото)Изменение размера изображения без потери качества

Вот мой код:

function _copyAndResizeImage($id, $wanted_width, $isAdvert=true) { 
// The file 
if ($isAdvert) { 
    $filename = "../upload/images/advert/".$id."/1.jpg"; 
} else { 
    $filename = "../upload/images/user/".$id.".jpg"; 
} 

list($width, $height) = getimagesize($filename); 

if ($width == 0) { 
    $percent=1; 
} else { 
    $percent = $wanted_width/$width; 
} 

// Content type 
header('Content-Type: image/jpeg'); 

// Get new dimensions 
$new_width = $width * $percent; 
$new_height = $height * $percent; 

// Resample 
$image_p = imagecreatetruecolor($new_width, $new_height); 
$image = imagecreatefromjpeg($filename); 
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 

// Output 
if ($isAdvert) { 
    imagejpeg($image_p, '../upload/images/advert/'.$id.'/1-'.$wanted_width.'.jpg'); 
} else { 
    imagejpeg($image_p, '../upload/images/user/'.$id.'-'.$wanted_width.'.jpg'); 
} 

} 

enter image description here

Вы получили идею? Благодаря

+3

Ну, вот что может сделать небольшое изображение, не так уж и есть. Насколько велика ваша оригинальная картина? –

+0

У меня нет источника, но размер источника, если обычно больше –

+0

, попробуйте некоторые библиотеки, такие как [phpThumb] (http://phpthumb.sourceforge.net/), или добавьте параметр качества изображения в функцию 'imagejpeg ' – bystwn22

ответ

0

imagejpeg JAS третий необязательный параметр в диапазоне от 0 до 100 для качества:

BOOL imagejpeg (ресурс $ изображения [, строка $ файла [, Int $ качество]])

Значения по умолчанию 75 должно быть довольно нормально.

+0

Даже 75% качество изображения - вы не заметили бы потерю, как то, что он видит; разница между 75 и 100 является номинальной для изображений с низким разрешением. –

3

Поскольку вы изменяете размеры меньших растровых изображений (пикселей), вы потеряете качество при изменении размера его до большего размера. Это ожидается. Если вы не хотите, чтобы это произошло, используйте SVG.