Наложение watermark php

Статус
В этой теме нельзя размещать новые ответы.

Pashka Korchagin

Постоялец
Регистрация
23 Дек 2009
Сообщения
113
Реакции
8
Использую бесплатный загрузчик картинок responsivefilemanager.com с редактором TinyMce. Загрузчик хорош, но в нем не проработана функция наложения ватермарок на изображения при загрузке, хотя сама функция есть, не знаю как реализовать, т.к в 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:
 
Для просмотра ссылки Войди или Зарегистрируйся

Верно ответили. Ты когда файл переместишь - во втором параметре имя перемещаемого файла. Его то и нужно использовать в функции наложения картинки.
 
Ты когда файл переместишь - во втором параметре имя перемещаемого файла. Его то и нужно использовать в функции наложения картинки.
Можно подробнее. Это здесь?
Код:
$stamp = $this->openImage ($watermarkImage);    # stamp
    $im = $this->imageResized;            # photo

Как правильно прописать .

п.с. Кур нет, как и денег, поэтому и не клюют.
 
Последнее редактирование:
Напиши после move_upload...
echo $targetFile;
die();
Убедишься - что в этой переменной путь к файлу.
Далее используй этот путь согласно инструкции к скрипту для наложения картинки.
 
Напиши после move_upload...
echo $targetFile;
die();
Как убедится? Прописал, а где посмотреть путь?
Далее используй этот путь согласно инструкции к скрипту для наложения картинки.
Вы имеете ввиду Для просмотра ссылки Войди или Зарегистрируйся

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

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

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

Если здесь прописать правильные пути, все будет работать?
 
с правильными путями будет работать, скрипт просто поверх картинки основной наложит вторую которая внутри $stamp
 
с правильными путями будет работать, скрипт просто поверх картинки основной наложит вторую которая внутри $stamp
WhisperingEchoes, может Вы подскажете, как правильно прописать пути в эти строки.

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

Вы имеете ввиду Для просмотра ссылки Войди или Зарегистрируйся

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

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

$watermarkImage - в эту переменную вы и должны передать значение пути до watermark
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху