Эта картинка становится размытой после изменения размера - PullRequest
1 голос
/ 05 ноября 2011

После загрузки и изменения размера этой фотографии я заметил, что ее качество становится слегка размытым ... почему это происходит? У меня достаточно места, так что еще может быть проблема?

оригинал

enter image description here

после изменения размера,

enter image description here

Но другие загруженные мною картинки не имеют никаких проблем. Почему это происходит только с этой картинкой?

Будет ли это вызвано функцией изменения размера ниже?

function resize_image($image,$width,$height,$scale) 
{
    # Calculating proportionality
    list($imagewidth, $imageheight, $imageType) = getimagesize($image);
    $imageType = image_type_to_mime_type($imageType);
    $newImageWidth = ceil($width * $scale);
    $newImageHeight = ceil($height * $scale);
    $newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);

    # Loading image to memory according to type
    switch($imageType) 
    {
        case "image/gif":
            $source = imagecreatefromgif($image); 
            break;
        case "image/pjpeg":
        case "image/jpeg":
        case "image/jpg":
            $source = imagecreatefromjpeg($image); 
            break;
        case "image/png":
        case "image/x-png":
            $source = imagecreatefrompng($image); 
            break;
    }

    # This is the resizing/resampling/transparency-preserving magic
    if ( ($imageType == "image/gif") || ($imageType == "image/png") ) 
    {
        $transIndex = imagecolortransparent($source);

        if($transIndex >= 0) 
        {
            $transcol = imagecolorsforindex($source, $transIndex);
            $transIndex = imagecolorallocatealpha($newImage, $transcol['red'], $transcol['green'], $transcol['blue'], 127);
            imagefill($newImage, 0, 0, $transIndex);
            imagecolortransparent($newImage, $transIndex);
        }

        elseif ($imageType == "image/png" || $imageType == "image/x-png") 
        {
            imagealphablending($newImage, false);
            $color = imagecolorallocatealpha($newImage, 0, 0, 0, 127);
            imagefill($newImage, 0, 0, $color);
            imagesavealpha($newImage, true);
        }
    }

    imagecopyresampled($newImage,$source,0,0,0,0,$newImageWidth,$newImageHeight,$width,$height);

    # Writing image according to type to the output destination
    switch($imageType) 
    {
        case "image/gif":
            imagegif($newImage,$image); 
            break;
        case "image/pjpeg":
        case "image/jpeg":
        case "image/jpg":
            imagejpeg($newImage,$image,90); 
            break;
        case "image/png":
        case "image/x-png":
            imagepng($newImage,$image);  
            break;
    }

    chmod($image, 0777);
    return $image;
}

1 Ответ

1 голос
/ 05 ноября 2011

Jpeg - это формат, оптимизированный для сжатия фотографий. На таких изображениях, как те, что вы показываете, артефакты гораздо более заметны, чем обычно. Я предлагаю вам изменить уровень качества в этой строке:

imagejpeg($newImage,$image,100);

Другой вариант - сохранить изображение в png.

...