Как прикрутить watermark на сайт?

siszine

Новичок
Добрый день!
Есть сайт - на нем есть заливка картинок, при этом форматирование в большие и маленькие размеры фото.

Помогите сделать так, чтобы при добавлении картинки - автоматически в нижний правый угол ставился водяной знак.
В какое нужно место вставить и какой нужный код для наложения водяного знака

PHP:
    <?php
    /**
    * Библиотека функций для работы с изображениями
    *
    * @author Smily
    * @package libs
    */


    /**
    * Функция для изменения размеров изображения.
    * Получает массив параметоров для изменения изображения следующего вида:
    * array(
    *    'file' => '',  полный либо относительный путь к исходному файлу изображения
    *        'width' => 0, ширина генерируемого изображения
    *    'height' => 0, высота генерируемого изображения
    * )
    *
    * @param unknown_type $resizeParams
    * @return unknown
    */
    function img_imageResize($imageFile, $width, $height = 0, $clipping = false, $cornerRadius = 0) {
        $isSquare = false; //признак создания квадратного изображения   
        $resizeVars = array( 'resizeOn' => FALSE );
        //если файл существует и заданы размеры преобразования
        if ( is_file($imageFile) && (($width > 0) || ($height > 0)) ) {
            $imageStatus = getimagesize($imageFile);
            //если файл является корректным изображением типа GIF, JPEG или PNG
            if ( !is_null($imageStatus) && ($imageStatus[2] > 0) && ($imageStatus[2] < 4) ) {
                $imageWidth = $imageStatus[0];
                $imageHeight = $imageStatus[1];
                $deltaW = 0;
                $deltaH = 0;
                if ($height == 0) {
                    //делаем все изображения одной ширины
                    $height = floor( ($width * $imageHeight) / $imageWidth );
                    $isSquare = true;
                } elseif ($width == 0) {
                    //делаем все изображения одной высоты
                    $width = floor( ($height * $imageWidth) / $imageHeight);
                    $isSquare = true;
                } else {
                    //если задана высота и ширина и не задан клиппинг, уменьшаем изображение по большей стороне
                    if (!$clipping) {
                        if ($imageWidth > $imageHeight) {
                            $height = floor( ($width * $imageHeight) / $imageWidth );
                        } else {
                            $width = floor( ($height * $imageWidth) / $imageHeight);
                        }
                    }
                }
                //если задан клиппинг, делаем изображение квадратным по меньшей стороне
                //if ($clipping) {
                //    if ($isSquare) {
                //        if ($width < $height) {
                //            $height = $width;
                //            $deltaH = floor(($imageHeight - $imageWidth) / 2);
                //            $imageHeight = $imageWidth;
                //        } else {
                //            $width = $height;
                //            $deltaW = floor(($imageWidth - $imageHeight) / 2);
                //            $imageWidth = $imageHeight;
                //        }
                //    } else {
                        //вычисляем высоту изображения
                //      $tempSize = floor( ($height * $imageWidth) / $width);
                        //если высота меньше исходной
                //        if ($tempSize < $imageHeight) {
                //            $deltaW = floor(($imageWidth - (($tempSize * $width) / $height)) / 2);
                //            $deltaH = floor(($imageHeight - $tempSize) / 2);
                //            $imageHeight = $tempSize;
                //            $imageWidth = floor(($tempSize * $width) / $height);
                //        } else {
                            //ширина
                //            $tempSize = floor( ($width * $imageHeight) / $height);
                //            $deltaW =  floor(($imageWidth - $tempSize) / 2);
                //            $deltaH = floor(($imageHeight - (($tempSize * $height) / $width)) / 2);
                //            $imageWidth = $tempSize;
                //            $imageHeight = floor(($tempSize * $height) / $width);
                //        }
                //    }
                //}
                //создаем объект изображения из исходного файла
                switch($imageStatus[2]) {
                    case 1:
                        $imageLink = imagecreatefromgif($imageFile);
                        break;
                    case 2:
                        $imageLink = imagecreatefromjpeg($imageFile);
                        break;
                    case 3:
                        $imageLink = imagecreatefrompng($imageFile);
                        break;
                }
                //создаем объект уменьшенного изображения
                $resizeLink = imagecreatetruecolor($width, $height);
                //отображаем исходное изображение в уменьшенное
                imagecopyresampled($resizeLink, $imageLink, 0, 0, $deltaW, $deltaH, $width, $height, $imageWidth, $imageHeight);
                //если задано скругление углов, выполняем его
                if (intval($cornerRadius) > 0) {
                    /**
                    * Чем выше rate, тем лучше качество сглаживания и больше время обработки и
                    * потребление памяти.
                    * 
                    * Оптимальный rate подбирается в зависимости от радиуса.
                    */
                    $rate = 3;
                    imagealphablending($resizeLink, false);
                    imagesavealpha($resizeLink, true);
                    $rs_radius = $cornerRadius * $rate;
                    $rs_size = $rs_radius * 2;           
                    $corner = imagecreatetruecolor($rs_size, $rs_size);
                    imagealphablending($corner, false);
                    $trans = imagecolorallocatealpha($corner, 255, 255, 255, 127);
                    imagefill($corner, 0, 0, $trans);
                    $positions = array(
                        array(0, 0, 0, 0),
                        array($rs_radius, 0, $width - $cornerRadius, 0),
                        array($rs_radius, $rs_radius, $width - $cornerRadius, $height - $cornerRadius),
                        array(0, $rs_radius, 0, $height - $cornerRadius),
                    );
                    foreach ($positions as $pos) {
                        imagecopyresampled($corner, $resizeLink, $pos[0], $pos[1], $pos[2], $pos[3], $rs_radius, $rs_radius, $cornerRadius, $cornerRadius);
                    }
                    $lx = $ly = 0;
                    $i = -$rs_radius;
                    $y2 = -$i;
                    $r_2 = $rs_radius * $rs_radius;
                    for (; $i <= $y2; $i++) {
           
                        $y = $i;
                        $x = sqrt($r_2 - $y * $y);
           
                        $y += $rs_radius;
                        $x += $rs_radius;
           
                        imageline($corner, $x, $y, $rs_size, $y, $trans);
                        imageline($corner, 0, $y, $rs_size - $x, $y, $trans);
           
                        $lx = $x;
                        $ly = $y;
                    }
                    foreach ($positions as $i => $pos) {
                        imagecopyresampled($resizeLink, $corner, $pos[2], $pos[3], $pos[0], $pos[1], $cornerRadius, $cornerRadius, $rs_radius, $rs_radius);
                    }
                    if (strtolower(fs_getExt($imageFile)) != 'png') {
                        unlink($imageFile);
                        $imageFile = str_replace('.'.fs_getExt($imageFile), '.png', $imageFile);
                    }
                    imagepng($resizeLink, $imageFile);       
                } else {
                    switch($imageStatus[2]) {
                        case 1:
                            imagegif($resizeLink, $imageFile);
                            break;
                        case 2:
                            imagejpeg($resizeLink, $imageFile, 100);
                            break;
                        case 3:
                            imagepng($resizeLink, $imageFile);
                            break;
                    }
                }
                imagedestroy($imageLink);
                imagedestroy($resizeLink);
                if(is_file($imageFile)) {
                    $resizeVars = array(
                        'resizeOn' => TRUE,
                        'resizeFile' => $imageFile,
                        'resizeWidth' => $width,
                        'resizeHeight' => $height,
                        'resizeFileSize' => filesize($imageFile)
                    );
                }
            }
        }
        return $resizeVars;   
    }

    function img_imageType($imageFile) {
        $imageStatus = @getimagesize($imageFile);
        return (is_null($imageStatus)) ? false: $imageStatus[2];
    }
    ?>
 

siszine

Новичок
Еще нашел файл для работы с файлами и картинками
PHP:
<?php
class Upload {
    private $tmpDir = ''; //временный каталог для сохранения файлов
   
    private $uploadConf = array(
        'required' => false,      //обязателен ли файл
        'fileTypes' => array(), //допустимые типы файлов (по расширению)
        'minFileSize' => 0,        //минимально допустимый размер файла
        'maxFileSize' => 0,        //максимально допустимый размер файла
        'isImage' => false,        //файл - это картинка
        'minImageWidth' => 0,    //минимально допустимая ширина файла
        'maxImageWidth' => 0,    //максимально допустимая ширина файла
        'minImageHeight' => 0,    //минимально допустимая высота файла
        'maxImageHeight' => 0    //максимально допустимая высота файла
    );
   
    private $uploadResult = array();
   
    public function __construct( $params = array() ) {
        $this->tmpDir = Kernel::core()->getVar('tmpDir');
        foreach ($params as $paramName => $paramValue) {
            if (array_key_exists($paramName, $this->uploadConf)) {
                $this->uploadConf[$paramName] = $paramValue;
            }
        }
    }
   
    public function updateConf( $params = array() ) {
        $this->uploadConf = array(
            'required' => false,      //обязателен ли файл
            'fileTypes' => array(), //допустимые типы файлов (по расширению)
            'minFileSize' => 0,        //минимально допустимый размер файла
            'maxFileSize' => 0,        //максимально допустимый размер файла
            'isImage' => false,        //файл - это картинка
            'minImageWidth' => 0,    //минимально допустимая ширина файла
            'maxImageWidth' => 0,    //максимально допустимая ширина файла
            'minImageHeight' => 0,    //минимально допустимая высота файла
            'maxImageHeight' => 0    //максимально допустимая высота файла
        );
//        addArrayLog($params);
        if(is_array($params)) {
            foreach ($params as $paramName => $paramValue) {
                if (array_key_exists($paramName, $this->uploadConf)) {
                    $this->uploadConf[$paramName] = $paramValue;
                }
            }
        }
    }
   
    public function getUpload( $fieldName ) {
        return getFromArray( $fieldName, $this->uploadResult );
    }
   
    public function singleUpload($fieldName) {
        $width = 0;
        $height = 0;
        //проверяем массив $_FILES на наличие файла
        if (isset($_FILES[$fieldName])) {
            if ( getFromArray('name', $_FILES[$fieldName]) && getFromArray('size', $_FILES[$fieldName]) && (getFromArray('error', $_FILES[$fieldName]) == 0) ) {
                //валидация файла
                if ( !empty($this->uploadConf['fileTypes']) && !in_array(strtolower(fs_getExt(getFromArray('name', $_FILES[$fieldName]))), $this->uploadConf['fileTypes']) ) {
                    //если задано ограничение по типам файла и файл не соответствует заданным типам
                    $this->uploadResult[$fieldName]['errors'] = 'error_incorrectFileType';
                } elseif ( ($this->uploadConf['minFileSize'] != 0) && (getFromArray('size', $_FILES[$fieldName]) < $this->uploadConf['minFileSize']) ) {
                    //если размер файла меньше заданного
                    $this->uploadResult[$fieldName]['errors'] = 'error_incorrectMinFileSize';
                } elseif ( ($this->uploadConf['maxFileSize'] != 0) && (getFromArray('size', $_FILES[$fieldName]) > $this->uploadConf['maxFileSize']) ) {
                    //если размер файла больше заданного
                    $this->uploadResult[$fieldName]['errors'] = 'error_incorrectMaxFileSize';
                } elseif ( $this->uploadConf['isImage'] ) {
                    //валидация размеров картинки
                    $imageStatus = getimagesize(getFromArray('tmp_name', $_FILES[$fieldName]));
                    if ( is_null($imageStatus) ) {
                        //неправильная картинка
                        $this->uploadResult[$fieldName]['errors'] = 'error_incorrectImageFile';
                    } elseif ( ($this->uploadConf['minImageWidth'] != 0) && ($imageStatus[0] < $this->uploadConf['minImageWidth']) ) {
                        //если ширина картинки меньше заданного
                        $this->uploadResult[$fieldName]['errors'] = 'error_incorrectMinImageFileWidth';
                    } elseif ( ($this->uploadConf['maxImageWidth'] != 0) && ($imageStatus[0] > $this->uploadConf['maxImageWidth']) ) {
                        //если ширина картинки больше заданного
                        $this->uploadResult[$fieldName]['errors'] = 'error_incorrectMaxImageFileWidth';
                    } elseif ( ($this->uploadConf['minImageHeight'] != 0) && ($imageStatus[1] < $this->uploadConf['minImageHeight']) ) {
                        //если высота картинки меньше заданного
                        $this->uploadResult[$fieldName]['errors'] = 'error_incorrectMinImageFileHeight';
                    } elseif ( ($this->uploadConf['maxImageHeight'] != 0) && ($imageStatus[1] > $this->uploadConf['maxImageHeight']) ) {
                        //если высота картинки больше заданного
                        $this->uploadResult[$fieldName]['errors'] = 'error_incorrectMaxImageFileHeight';
                    } else {
                        $width = $imageStatus[0];
                        $height = $imageStatus[1];
                    }
                }
 

siszine

Новичок
Продолжение 2го файла
PHP:
                //если ошибок нет
                if ( !getFromArray('errors', getFromArray($fieldName, $this->uploadResult)) ) {
                    //генерируем случайное имя файла
                    $filename = time() . rand(0, 999) . '.' . strtolower(fs_getExt(getFromArray('name', $_FILES[$fieldName])));
                    //копируем файл во временный каталог
                    if ( copy(getFromArray('tmp_name', $_FILES[$fieldName]), $this->tmpDir.$filename) ) {
                        $this->uploadResult[$fieldName]['filename'] = getFromArray('name', $_FILES[$fieldName]);
                        $this->uploadResult[$fieldName]['uploadpath'] = $this->tmpDir.$filename;
                        $this->uploadResult[$fieldName]['size'] = filesize($this->tmpDir.$filename);
                        $this->uploadResult[$fieldName]['type'] = fs_getExt($filename);
                        $this->uploadResult[$fieldName]['width'] = $width;
                        $this->uploadResult[$fieldName]['height'] = $height;
                    } else {
                        $this->uploadResult[$fieldName]['errors'] = 'error_copyTmpDir';
                    }
                }
            } elseif ($this->uploadConf['required']) {
                $this->uploadResult[$fieldName]['errors'] = 'error_emptyFile';
            }
        } elseif ($this->uploadConf['required']) {
            $this->uploadResult[$fieldName]['errors'] = 'error_emptyFile';
        }
        return getFromArray($fieldName, $this->uploadResult);
        //return $this->uploadResult[$fieldName];
    }
   
    private function convertStorageMethod($fieldName)
    {
        $newFiles = array();
        $num = count($_FILES[$fieldName]['name']);
        foreach($_FILES[$fieldName] as $param => $values) {
            foreach ($values as $key => $val) {
                if (!isset($newFiles[$key])) {
                    $newFiles[$key] = array();
                }
                $newFiles[$key][$param] = $val;
            }
        }
        $_FILES[$fieldName] = $newFiles;
    }
   
    public function arrayUpload($fieldName)
    {
        $width = 0;
        $height = 0;
        //проверяем массив $_FILES на наличие файлов
        if (isset($_FILES[$fieldName])) {
            $this->convertStorageMethod($fieldName);
            foreach ($_FILES[$fieldName] as $key => $file) {
                if ( getFromArray('name', $file) && getFromArray('size', $file) && (getFromArray('error', $file) == 0) ) {
                    //валидация файла
                    if ( !empty($this->uploadConf['fileTypes']) && !in_array(strtolower(fs_getExt(getFromArray('name', $file))), $this->uploadConf['fileTypes']) ) {
                        //если задано ограничение по типам файла и файл не соответствует заданным типам
                        $this->uploadResult[$fieldName][$key]['errors'] = 'error_incorrectFileType';
                    } elseif ( ($this->uploadConf['minFileSize'] != 0) && (getFromArray('size', $file) < $this->uploadConf['minFileSize']) ) {
                        //если размер файла меньше заданного
                        $this->uploadResult[$fieldName][$key]['errors'] = 'error_incorrectMinFileSize';
                    } elseif ( ($this->uploadConf['maxFileSize'] != 0) && (getFromArray('size', $file) > $this->uploadConf['maxFileSize']) ) {
                        //если размер файла больше заданного
                        $this->uploadResult[$fieldName][$key]['errors'] = 'error_incorrectMaxFileSize';
                    } elseif ( $this->uploadConf['isImage'] ) {
                        //валидация размеров картинки
                        $imageStatus = getimagesize(getFromArray('tmp_name', $file));
                        if ( is_null($imageStatus) ) {
                            //неправильная картинка
                            $this->uploadResult[$fieldName][$key]['errors'] = 'error_incorrectImageFile';
                        } elseif ( ($this->uploadConf['minImageWidth'] != 0) && ($imageStatus[0] < $this->uploadConf['minImageWidth']) ) {
                            //если ширина картинки меньше заданного
                            $this->uploadResult[$fieldName][$key]['errors'] = 'error_incorrectMinImageFileWidth';
                        } elseif ( ($this->uploadConf['maxImageWidth'] != 0) && ($imageStatus[0] > $this->uploadConf['maxImageWidth']) ) {
                            //если ширина картинки больше заданного
                            $this->uploadResult[$fieldName][$key]['errors'] = 'error_incorrectMaxImageFileWidth';
                        } elseif ( ($this->uploadConf['minImageHeight'] != 0) && ($imageStatus[1] < $this->uploadConf['minImageHeight']) ) {
                            //если высота картинки меньше заданного
                            $this->uploadResult[$fieldName][$key]['errors'] = 'error_incorrectMinImageFileHeight';
                        } elseif ( ($this->uploadConf['maxImageHeight'] != 0) && ($imageStatus[1] > $this->uploadConf['maxImageHeight']) ) {
                            //если высота картинки больше заданного
                            $this->uploadResult[$fieldName][$key]['errors'] = 'error_incorrectMaxImageFileHeight';
                        } else {
                            $width = $imageStatus[0];
                            $height = $imageStatus[1];
                        }
                    }
                    //если ошибок нет
                    if ( !getFromArray('errors', getFromArray($key,getFromArray($fieldName, $this->uploadResult))) ) {
                        //генерируем случайное имя файла
                        $filename = time() . rand(0, 999) . '.' . strtolower(fs_getExt(getFromArray('name', $file)));
                        //копируем файл во временный каталог
                        if ( copy(getFromArray('tmp_name', $file), $this->tmpDir.$filename) ) {
                            $this->uploadResult[$fieldName][$key]['filename'] = getFromArray('name', $file);
                            $this->uploadResult[$fieldName][$key]['uploadpath'] = $this->tmpDir.$filename;
                            $this->uploadResult[$fieldName][$key]['size'] = filesize($this->tmpDir.$filename);
                            $this->uploadResult[$fieldName][$key]['type'] = fs_getExt($filename);
                            $this->uploadResult[$fieldName][$key]['width'] = $width;
                            $this->uploadResult[$fieldName][$key]['height'] = $height;
                        } else {
                            $this->uploadResult[$fieldName][$key]['errors'] = 'error_copyTmpDir';
                        }
                    }
                } elseif ($this->uploadConf['required']) {
                    $this->uploadResult[$fieldName][$key]['errors'] = 'error_emptyFile';
                }
            }
        } elseif ($this->uploadConf['required']) {
            $this->uploadResult[$fieldName]['errors'] = 'error_emptyFile';
        }
        return getFromArray($fieldName, $this->uploadResult);
    }
   
    public function multiUpload() {
        $results = array();
        foreach ($_FILES as $fieldName => $fileParams) {
            $results[] = $this->singleUpload($fieldName);
        }
        return $results;
    }
}
?>
 
Сверху