Изменение размера и формата изображения на PHP + GD

Довольно часто при работе требуется изменить размеры картинки, и большинство примеров, которые есть в интернете содержат ошибку, из-за которой изменённые картинки теряют свои цвета, а всё дело то в одной строке:

$resImage = ImageCreateTrueColor($destWidth, $destHeight);

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

Максимальный размер каждого изображения - 200кб.

Чтобы увеличить размер загружаемого файла до 2Мб необходимо войти или зарегистрироваться!

Новый размер:




function SetImgSize($img, $width, $height, $AspectRatio)
{
//Создаем изображение в зависимости от типа исходного файла
// для упрощения, считаю, что расширение соответствует типу файла
switch ( strtolower(strrchr($img, '.')) ){
case "jpg":
    $srcImage = @ImageCreateFromJPEG($img);
    break;
case "gif":
    $srcImage = @ImageCreateFromGIF($img);
    break;
case "png":
    $srcImage = @ImageCreateFromPNG($img);
    break;
default:
    return -1;
}
$srcWidth = ImageSX($srcImage);
$srcHeight = ImageSY($srcImage);
echo 'Исходная картинка('.$srcWidth.'x'.$srcHeight.'): <b>'.$pURL_name.'</b><br><img src="'.$img.'" />';
if(($width < $srcWidth) || ($height > $srcHeight))
{   if($AspectRatio){
    $ratioWidth = $srcWidth/$width;
    $ratioHeight = $srcHeight/$height;
    if($ratioWidth < $ratioHeight)
       {
    $destWidth = intval($srcWidth/$ratioHeight);
    $destHeight = $height;
       }
    else
       {
    $destWidth = $width;
    $destHeight = intval($srcHeight/$ratioWidth);
       }
    }else {
    $destHeight = $height;
    $destWidth = $width;}
    $resImage = ImageCreateTrueColor($destWidth, $destHeight);
    ImageCopyResampled($resImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
    unlink($img);// удаляю исходный файл
    switch ( strtolower(strrchr($img, '.')) ){
    case "jpg":
        ImageJPEG($resImage, $img, 100); // 100 - максимальное качество
        break;
    case "gif":
        ImageGIF($resImage, $img);
        break;
    case "png":
        ImagePNG($resImage, $img);
        break;
    }
    ImageDestroy($srcImage);
    ImageDestroy($resImage);
    echo "<br>\nИзмененная картинка(".$destWidth.'x'.$destHeight.'):<br><img src="'.$img.'" />';
}
}

В примере для упрощения умышленно допущена ошибка. На экране вы увидите только измененную картинку, т.к. к моменту вывода исходная картинка будет затерта новой.

Возможно Вам будет интересно:


.