PHP snippets

Примеры PHP кода

Создание уменьшенной копии изображения

<?php

/**
 * @param  string  $sSrcname  Файл исходного изображения
 * @param  string  $sDstName  Файл уменьшенной копии
 * @param  int     $iDstW     Максимальная ширина копии
 * @param  int     $iDstH     Максимальная высота копии
 */

function CreateThumbnail($sSrcName, $sDstName, $iDstW, $iDstH)
{
    // Получим информацию о исходном изображении
    $aImgInfo = getImageSize($sSrcName);

    // Определим тип
    switch ($aImgInfo[2])
    {
        case IMAGETYPE_JPEG:
            $sType = 'jpeg';
        break;

        case IMAGETYPE_PNG:
            $sType = 'png';
        break;
       
        case IMAGETYPE_GIF:
            $sType = 'gif';
        break;

        default:
            // Если тип нам не нравится, шлем нафиг
            return false;
        break;
    }

    if (!function_exists('imagecreatefrom' . $sType))
    {
        return false;
    }

    // Исходное изображение
    $imgSrc = call_user_func('imagecreatefrom' . $sType, $sSrcName);

    // Теперь $iSrcW и $iSrcH ширина и высота исходника
    list($iSrcW, $iSrcH) = $aImgInfo;

    // Далее алгоритм определения пропорции
    if (($iSrcW > $iDstW) || ($iSrcH > $iDstH))
    {
        if ($iSrcW > $iSrcH)
        {
            $fK = $iDstW / $iSrcW;
        }
        else
        {
            $fK = $iDstH / $iSrcH;
        }
    }
    else
    {
        $fK = 1;
    }

    $iNewW = round($iSrcW * $fK); // Ширина копии
    $iNewH = round($iSrcH * $fK); // Высота копии

    // Создаем уменьшенную копию
    $imgDst = imagecreatetruecolor($iNewW, $iNewH);
    ImageCopyResampled($imgDst, $imgSrc, 0, 0, 0, 0, $iNewW, $iNewH, $iSrcW,
        $iSrcH); // Изменяем размер пропорционально со сглаживанием

    // Сохраняем в $sDstName
    call_user_func_array('image' . $sType, array($imgDst, $sDstName));

    return true;
}