Изменение размера изображения (ресайз) PNG с сохранением прозрачности в PHP


Для того, чтобы при ресайзе изображения в формате PNG с помощью PHP-скрипта сохранялась прозрачность необходимо выполнить следующие действия:
 

//открываем исходное изображение
$src = ImageCreateFromPNG($dir . $_FILES[$k]['name']);
 
//создаем дескриптор для уменьшенного изображения
$dst = imagecreatetruecolor($max_width, $max_width / $xy);
 
//устанавливаем прозрачность
$this->setTransparency($dst, $src);
 
//изменяем размер
ImageCopyResampled($dst, $src, 0, 0, 0, 0, $max_width, $max_width / $xy, $width, $height);
 
//сохраняем уменьшенное изображение в файл
ImagePNG($dst, $dir_small . $_FILES[$k]['name']);
 
//закрываем дескрипторы исходного и уменьшенного изображений
ImageDestroy($src);
ImageDestroy($dst);
 

код самой функции setTransparency:
 
function setTransparency($new_image, $image_source)
{
        $transparencyIndex = imagecolortransparent($image_source);
        $transparencyColor = array('red' => 255, 'green' => 255, 'blue' => 255);
       
        if ($transparencyIndex >= 0)
            $transparencyColor = imagecolorsforindex($image_source, $transparencyIndex);   
       
        $transparencyIndex = imagecolorallocate($new_image, $transparencyColor['red'], $transparencyColor['green'], $transparencyColor['blue']);
        imagefill($new_image, 0, 0, $transparencyIndex);
        imagecolortransparent($new_image, $transparencyIndex);
}


Добавить комментарий

Логин:
Пароль:
Проверочное число: