Наложение watermark php

Тема в разделе "PHP", создана пользователем Pashka Korchagin, 3 окт 2016.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Pashka Korchagin

    Pashka Korchagin Постоялец

    Регистр.:
    23 дек 2009
    Сообщения:
    114
    Симпатии:
    7
    Использую бесплатный загрузчик картинок responsivefilemanager.com с редактором TinyMce. Загрузчик хорош, но в нем не проработана функция наложения ватермарок на изображения при загрузке, хотя сама функция есть, не знаю как реализовать, т.к в PHP я практически нуб.

    В загрузчике используется файл: php_image_magician.php

    В этом файле есть функция:
    Код:
      public function addWatermark($watermarkImage, $pos, $padding = 0, $opacity = 0)
        # Author:     Jarrod Oberto
        # Date:       18-11-09
        # Purpose:    Add watermark image
        # Param in:   (str) $watermark: The watermark image
      #       (str) $pos: Could be a pre-determined position such as:
      #           tl = top left,
      #           t  = top (middle),
      #           tr = top right,
      #           l  = left,
      #           m  = middle,
      #           r  = right,
      #           bl = bottom left,
      #           b  = bottom (middle),
      #           br = bottom right
      #         Or, it could be a co-ordinate position such as: 50x100
      #
      #       (int) $padding: If using a pre-determined position you can
      #         adjust the padding from the edges by passing an amount
      #         in pixels. If using co-ordinates, this value is ignored.
        # Param out:
        # Reference:  http://www.php.net/manual/en/image.examples-watermark.php
        # Notes:      Based on example in reference.
      #
        #
      {
    
        // Load the stamp and the photo to apply the watermark to
        $stamp = $this->openImage ($watermarkImage);    # stamp
        $im = $this->imageResized;            # photo
    
        // *** Get stamps width and height
        $sx = imagesx($stamp);
        $sy = imagesy($stamp);
    
        // *** Find co-ords to place image
        $posArray = $this->calculatePosition($pos, $padding, $sx, $sy);
        $x = $posArray['width'];
        $y = $posArray['height'];
    
        // *** Set watermark opacity
        if (fix_strtolower(strrchr($watermarkImage, '.')) == '.png') {
    
          $opacity = $this->invertTransparency($opacity, 100);
          $this->filterOpacity($stamp, $opacity);
        }
    
        // Copy the watermark image onto our photo
        imagecopy($im, $stamp, $x, $y, 0, 0, imagesx($stamp), imagesy($stamp));
    
      }
    Ниже код файла upload загрузчика:
    Код:
    <?php
    include('config/config.php');
    if($_SESSION['RF']["verify"] != "RESPONSIVEfilemanager") die('forbiden');
    include('include/utils.php');
    
    
    if (isset($_POST['path']))
    {
       $storeFolder = $_POST['path'];
       $storeFolderThumb = $_POST['path_thumb'];
    }
    else
    {
       $storeFolder = $current_path.$_POST["fldr"]; // correct for when IE is in Compatibility mode
       $storeFolderThumb = $thumbs_base_path.$_POST["fldr"];
    }
    
    $path_pos  = strpos($storeFolder,$current_path);
    $thumb_pos = strpos($storeFolderThumb,$thumbs_base_path);
    
    if ($path_pos!==0
        || $thumb_pos !==0
        || strpos($storeFolderThumb,'../',strlen($thumbs_base_path)) !== FALSE
        || strpos($storeFolderThumb,'./',strlen($thumbs_base_path)) !== FALSE
        || strpos($storeFolder,'../',strlen($current_path)) !== FALSE
        || strpos($storeFolder,'./',strlen($current_path)) !== FALSE )
            die('wrong path');
    
    
    $path = $storeFolder;
    $cycle = TRUE;
    $max_cycles = 50;
    $i = 0;
    while ($cycle && $i < $max_cycles)
    {
        $i++;
        if ($path == $current_path) $cycle = FALSE;
        if (file_exists($path."config.php"))
        {
            require_once($path."config.php");
            $cycle = FALSE;
        }
        $path = fix_dirname($path).'/';
    }
    
    
    if ( ! empty($_FILES))
    {
        $info = pathinfo($_FILES['file']['name']);
    
        if (in_array(fix_strtolower($info['extension']), $ext))
        {
            $tempFile = $_FILES['file']['tmp_name'];   
            $targetPath = $storeFolder;
            $targetPathThumb = $storeFolderThumb;
            $_FILES['file']['name'] = fix_filename($_FILES['file']['name'],$transliteration,$convert_spaces);
             
             // Gen. new file name if exists
            if (file_exists($targetPath.$_FILES['file']['name']))
            {
                $i = 1;
                $info = pathinfo($_FILES['file']['name']);
    
                // append number
                while(file_exists($targetPath.$info['filename']."_".$i.".".$info['extension'])) {
                    $i++;
                }
                $_FILES['file']['name'] = $info['filename']."_".$i.".".$info['extension'];
            }
    
            $targetFile =  $targetPath. $_FILES['file']['name'];
            $targetFileThumb =  $targetPathThumb. $_FILES['file']['name'];
           
            // check if image (and supported)
            if (in_array(fix_strtolower($info['extension']),$ext_img)) $is_img=TRUE;
            else $is_img=FALSE;
       
            // upload
            move_uploaded_file($tempFile,$targetFile);
            chmod($targetFile, 0755);
       
            if ($is_img)
            {
                $memory_error = FALSE;
                if ( ! create_img($targetFile, $targetFileThumb, 122, 91))
                {
                    $memory_error = FALSE;
                }
                else
                {
                    // TODO something with this long function baaaah...
                    if( ! new_thumbnails_creation($targetPath,$targetFile,$_FILES['file']['name'],$current_path,$relative_image_creation,$relative_path_from_current_pos,$relative_image_creation_name_to_prepend,$relative_image_creation_name_to_append,$relative_image_creation_width,$relative_image_creation_height,$relative_image_creation_option,$fixed_image_creation,$fixed_path_from_filemanager,$fixed_image_creation_name_to_prepend,$fixed_image_creation_to_append,$fixed_image_creation_width,$fixed_image_creation_height,$fixed_image_creation_option))
                    {
                        $memory_error = FALSE;
                    }
                    else
                    {           
                        $imginfo = getimagesize($targetFile);
                        $srcWidth = $imginfo[0];
                        $srcHeight = $imginfo[1];
                       
                        // resize images if set
                        if ($image_resizing)
                        {
                            if ($image_resizing_width == 0) // if width not set
                            {
                                if ($image_resizing_height == 0)
                                {
                                    $image_resizing_width = $srcWidth;
                                    $image_resizing_height = $srcHeight;
                                }
                                else
                                {
                                    $image_resizing_width = $image_resizing_height*$srcWidth/$srcHeight;
                                }
                            }
                            elseif ($image_resizing_height == 0) // if height not set
                            {
                                $image_resizing_height = $image_resizing_width*$srcHeight/$srcWidth;
                            }
    
                            // new dims and create
                            $srcWidth = $image_resizing_width;
                            $srcHeight = $image_resizing_height;
                            create_img($targetFile, $targetFile, $image_resizing_width, $image_resizing_height, $image_resizing_mode);
                        }
               
                        //max resizing limit control
                        $resize = FALSE;
                        if ($image_max_width != 0 && $srcWidth > $image_max_width && $image_resizing_override === FALSE)
                        {
                            $resize = TRUE;
                            $srcWidth = $image_max_width;
                           
                            if ($image_max_height == 0) $srcHeight = $image_max_width*$srcHeight/$srcWidth;
                        }
    
                        if ($image_max_height != 0 && $srcHeight > $image_max_height && $image_resizing_override === FALSE){
                            $resize = TRUE;
                            $srcHeight = $image_max_height;
                           
                            if ($image_max_width == 0) $srcWidth = $image_max_height*$srcWidth/$srcHeight;
                        }       
                       
                        if ($resize) create_img($targetFile, $targetFile, $srcWidth, $srcHeight, $image_max_mode);
                    }
                }   
    
                // not enough memory
                if ($memory_error)
                {
                    unlink($targetFile);
                    header('HTTP/1.1 406 Not enought Memory',TRUE,406);
                    exit();
                }
            }
        }
        else // file ext. is not in the allowed list
        {
            header('HTTP/1.1 406 file not permitted',TRUE,406);
            exit();
        }
    }
    else // no files to upload
    {
        header('HTTP/1.1 405 Bad Request', TRUE, 405);
        exit();
    }
    
    // redirect
    if (isset($_POST['submit']))
    {
        $query = http_build_query(array(
            'type'          => $_POST['type'],
            'lang'          => $_POST['lang'],
            'popup'         => $_POST['popup'],
            'field_id'  => $_POST['field_id'],
            'fldr'          => $_POST['fldr'],
        ));
    
        header("location: dialog.php?" . $query);
    }
    
    ?>
    Прошу помощи в решении вопроса. Буржуи ответили только, что вызов функции нужно делать в файле upload после:

    Код:
    // upload
            move_uploaded_file($tempFile,$targetFile);
    Как сделать не объясняют, хотят денег, а у меня их куры не клюют.:conf:
     
  2. javx

    javx

    Регистр.:
    28 авг 2015
    Сообщения:
    526
    Симпатии:
    252
    http://phrase_dictionary.academic.ru/1179/КУРЫ_НЕ_КЛЮЮТ

    Верно ответили. Ты когда файл переместишь - во втором параметре имя перемещаемого файла. Его то и нужно использовать в функции наложения картинки.
     
  3. Pashka Korchagin

    Pashka Korchagin Постоялец

    Регистр.:
    23 дек 2009
    Сообщения:
    114
    Симпатии:
    7
    Можно подробнее. Это здесь?
    Код:
    $stamp = $this->openImage ($watermarkImage);    # stamp
        $im = $this->imageResized;            # photo
    Как правильно прописать .

    п.с. Кур нет, как и денег, поэтому и не клюют.
     
    Последнее редактирование: 4 окт 2016
  4. javx

    javx

    Регистр.:
    28 авг 2015
    Сообщения:
    526
    Симпатии:
    252
    Напиши после move_upload...
    echo $targetFile;
    die();
    Убедишься - что в этой переменной путь к файлу.
    Далее используй этот путь согласно инструкции к скрипту для наложения картинки.
     
  5. Pashka Korchagin

    Pashka Korchagin Постоялец

    Регистр.:
    23 дек 2009
    Сообщения:
    114
    Симпатии:
    7
    Как убедится? Прописал, а где посмотреть путь?
    Вы имеете ввиду http://www.php.net/manual/en/image.examples-watermark.php

    Объясните нубу на пальцах, пожалуйста.

    Это путь к водяному знаку, праильно понимаю?
    $stamp = $this->openImage($watermarkImage);

    Это путь к картинке, на которую этот знак накладывается?
    $im = $this->imageResized;

    Если здесь прописать правильные пути, все будет работать?
     
  6. WhisperingEchoes

    WhisperingEchoes Создатель

    Регистр.:
    9 апр 2008
    Сообщения:
    23
    Симпатии:
    6
    с правильными путями будет работать, скрипт просто поверх картинки основной наложит вторую которая внутри $stamp
     
  7. Pashka Korchagin

    Pashka Korchagin Постоялец

    Регистр.:
    23 дек 2009
    Сообщения:
    114
    Симпатии:
    7
    WhisperingEchoes, может Вы подскажете, как правильно прописать пути в эти строки.

    Вопрос решен, прикрутил сторонний скрипт на первое время. Разработчик загрузчика пообещал реализовывать функцию наложения ватермарок в следующей версии.
     
    Последнее редактирование модератором: 4 окт 2016
  8. kreg1g

    kreg1g Писатель

    Регистр.:
    6 июн 2012
    Сообщения:
    6
    Симпатии:
    2
    $watermarkImage - в эту переменную вы и должны передать значение пути до watermark
     
  9. vdka

    vdka Писатель

    Регистр.:
    24 янв 2017
    Сообщения:
    1
    Симпатии:
    0
Статус темы:
Закрыта.