Правильный ресайз картинок на PHP

Довольно часто при работе требуется изменить размеры картинки, и большинство примеров которые есть в инете на содержат маленькую ошибку, из-за которой изменённые картинки теряют свои цвета, а всё дело то в одной строке... приведу здесь код своей функции для ресайза (не полностью). На вход подаются путь к изменяемой картинке, новая ширина и высота. Если размеры меньше новых размеров то ресайз не осуществляется.

CODE
<!--ec1-->
function SetImgSize($img, $width, $height)
{
         //получаем тип файла    
    {
        case "jpg":
            $srcImage = @ImageCreateFromJPEG($img);                
        break;
            
        case "gif":
            $srcImage = ImageCreateFromGIF($img);
        break;

        case "png":
            $srcImage = ImageCreateFromPNG($img);
        break;
        
        default:
            return -1;
        break;
    }
                
    $srcWidth  = ImageSX($srcImage);
    $srcHeight = ImageSY($srcImage);
        
    if(($width < $srcWidth) || ($height < $srcHeight))
    {
        $ratioWidth  = $srcWidth/$width;
        $ratioHeight = $srcHeight/$height;

        if($ratioWidth < $ratioHeight)
        {
            $destWidth  = $srcWidth/$ratioHeight;
            $destHeight = $height;
        }
        else
        {
            $destWidth  = $width;
            $destHeight = $srcHeight/$ratioWidth;                         
        }

                  //вот где собака порылась - везде стоит функция ImageCreate(...)
        $resImage = ImageCreateTrueColor($destWidth, $destHeight);
        
        ImageCopyResampled($resImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);    
            
        unlink($img);
            
        //определяем тип
        {
            case "jpg":
                ImageJPEG($resImage, $img, 100);
            break;
                
            case "gif":
                ImageGIF($resImage, $img);                     
            break;

            case "png":
                ImagePNG($resImage, $img);                     
            break;
        }
            
        ImageDestroy($srcImage);
        ImageDestroy($resImage);
    }
}

Источник: PHP things ( Блоги на Realcoding.NET )



Опубликовал admin
29 Сен, Пятница 2006г.



Программирование для чайников.