watermark в netcat

Тема в разделе "NetCat", создана пользователем jlekapb, 9 дек 2010.

  1. jlekapb

    jlekapb Создатель

    Регистр.:
    27 авг 2010
    Сообщения:
    27
    Симпатии:
    6
    Добрый день.
    Здесь нашёл статью, как наложить watermark
    http://anetcat.ru/blogs/blogs_7.html
    function.inc.php
    http://anetcat.ru/modules/no-oplata/?file=/netcat_files/707_2.rar
    Делаю так:
    Действие после добавления объекта :
    Код:
    ";
    ncc_watermark("$f_Picture", "/folder1/logo.png", "$f_Picture", 5, 50);
    echo"
    При этом фото добавляется в альбом, но знака на ней нет.

    Подскажите, пожалуйста, где ошибка.
     
  2. dubinmo

    dubinmo Создатель

    Регистр.:
    29 дек 2009
    Сообщения:
    13
    Симпатии:
    2
    Функция выполняеться? Еще немного смущает путь до картинки, может скрипт просто не может найти изображение.
     
    jlekapb нравится это.
  3. hotx

    hotx Постоялец

    Регистр.:
    6 май 2006
    Сообщения:
    71
    Симпатии:
    31
    Выдержка из вашей статьи:
    Мое личное мнение: лучше всегда хранить исходники, а ватермарки и преобразования проводить уже на выводе.

    Примеры:
    Перейти по ссылке
    Перейти по ссылке
    Перейти по ссылке (в комментах указано как и что изменить для watermark)

    PS Ну естественно, все картинки потом должны складываться в кеш.
     
    jlekapb нравится это.
  4. jlekapb

    jlekapb Создатель

    Регистр.:
    27 авг 2010
    Сообщения:
    27
    Симпатии:
    6
    Спасибо, что откликнулись.

    А как понять, что он не выполняется?
    Ошибок не выдаёт.
    В смысле путь к логотипу? Есть варианты, как указать правильно?

    Спасибо за информацию, обязательно ознакомлюсь.
    Но, информация на англ, что замедлит выполнение задачи.
    Хотелось уже сделать с приведённой мной функции, а потом разбираться. Понимаю, что подход не верный, но не всё зависит от меня.
     
  5. Cokol

    Cokol Создатель

    Регистр.:
    11 июн 2008
    Сообщения:
    17
    Симпатии:
    4
    Во-первых, вам нужно проверить, что на вашем хостинге подключена библиотека GD - она предназначена для работы с графикой. Обычно это можно сделать через административную панель хостинга, либо просмотрел список модулей php в выводе функций phpinfo()
    Во-вторых, рекомендую передавать в функцию параметры немного иначе
    ncc_watermark("$f_Picture", "/folder1/logo.png", "$f_Picture", 5, 50);
    ncc_watermark($f_Picture, "/folder1/logo.png", $f_Picture, 5, 50);
    В-третьих, что самое важно - эта функция не обрабатывает файл и сохраняет его, а обрабатывает файл и выводит его
    Потому использовать её нужно не в действии после добавления объекта, а в выводе списке объектов или страницы отдельного объекта.
     
    jlekapb нравится это.
  6. DUMKiN

    DUMKiN Писатель

    Регистр.:
    13 янв 2011
    Сообщения:
    3
    Симпатии:
    0
    Я правильно понял что, скрипт будет отрабатываться каждый раз при обновлении страницы...А если фотографий сотни...
     
  7. al430

    al430 Постоялец

    Регистр.:
    31 окт 2010
    Сообщения:
    94
    Симпатии:
    9
    Нет , данный код работать не хочет, надо разбираться в php файлах
     
  8. equilibrium07

    equilibrium07 Создатель

    Регистр.:
    10 янв 2012
    Сообщения:
    9
    Симпатии:
    0
    решение - добавь скрипт в "действие после добавления объекта" только не забудь его сначала его сгенерить
    ммм нормально ватермарк работает тока в 4.5... просто в 4.2 вообще нет кода ватермарков.
    допиши в netcat/require/classes/nc_imagetransform.class.php вот это если версия меньще 4.5


    PHP:
    public static function putWatermark_file $filepath$watermark$mode ) {
     
    $nc_core nc_Core::get_object();
     
    // исходный файл
     
    if (!file_exists($filepath ) ) {
     
    $filepath $nc_core->DOCUMENT_ROOT.$nc_core->SUB_FOLDER.$filepath;
     
    }
     
    if ( !
    file_exists($filepath) ) {
     
    trigger_error("File ".$filepath." not found."E_USER_WARNING);
     
    return;
     
    }
     
    $src getimagesize($filepath);
     
    $src_w $src[0]; // ширина
     
    $src_h $src[1]; // высота
     
    $src_type strtolower(substr($src['mime'], strpos($src['mime'], '/')+1)); // тип
     
    // в зависимости от типа - разные функции
     
    $func function_exists("imagecreatefrom".$src_type) ? "imagecreatefrom".$src_type "imagecreatefromjpeg";
     
    // ресурс
     
    $img_src $func($filepath);
     
     
     
    // ватермарк
     
    if (!file_exists($watermark ) ) {
     
    $watermark $nc_core->DOCUMENT_ROOT.$nc_core->SUB_FOLDER.$watermark;
     
    }
     
    if ( !
    file_exists($watermark) ) {
     
    trigger_error("File ".$watermark." not found."E_USER_WARNING);
     
    return;
     
    }
     
    $water getimagesize($watermark);
     
    $water_w $water[0]; // ширина
     
    $water_h $water[1]; // высота
     
    $water_type strtolower(substr($water['mime'], strpos($water['mime'], '/')+1)); // тип
     
    // в зависимости от типа - разные функции
     
    $func function_exists("imagecreatefrom".$water_type) ? "imagecreatefrom".$water_type "imagecreatefromjpeg";
     
    // ресурс
     
    $img_water $func($watermark);
     
     
     
    // результат
     
    $img imagecreatetruecolor($src_w$src_h);
     
    // копируем в результат исходное изображение
     
    imagecopyresampled($img$img_src0000$src_w$src_h$src_w$src_h);
     
    // опрделяем, куда копировать ватермарк
     
    switch ( $mode ) {
     
    case 
    // левый верхний угол
     
    $x $y 3// c небольшим сдвигом
     
    break;
     
    case 
    2// правый верхний угол
     
    $x $src_w $water_w 3;
     
    $y 3;
     
    break;
     
    case 
    3// левый низ
     
    $y $src_h $water_h 3;
     
    $x 3;
     
    break;
     
    case 
    4// правый низ
     
    $x $src_w $water_w 3;
     
    $y $src_h $water_h 3;
     
    break;
     
    default: 
    // по центру
     
    $x floor(($src_w $water_w) / 2);
     
    $y floor(($src_h $water_h) / 2);
     
    }
     
    if ( 
    $x $x 0;
     
    if ( 
    $y $y 0;
     
    // копируем ватермарк
     
    imagecopy($img$img_water$x$y00$water_w$water_h);
     
     
     
    //записываем в файл
     
    $func function_exists("image".$src_type) ? "image".$src_type "imagejpg";
     
    // можно задать качество
     
    if ( func == "imagejpeg" || $func == "imagepng") {
     
    $r $func($img$filepath95);
     
    }
     
    else {
     
    $r $func($img$filepath);
     
    }
     
     
     
    imagedestroy($img);
     
    imagedestroy($img_src);
     
    imagedestroy($img_water);
     
     
     
    return 
    $r;
     
    }
     
     
     
     
     
    public static function 
    putWatermark $classID$field$message$watermark$mode ) {
     
    global 
    $nc_core$db;
     
    $message intval($message);
     
     
     
    $src nc_file_path($classID$message$field);
     
    if ( !
    $src ) return false;
     
     
     
    // вставляем ватермарк
     
    self::putWatermark_file($src$watermark$mode);
     
     
     
    // теперь нужно обновить размер
     
     
     
    $systemTableID 0;
     
    $system_tables = array("Catalogue" => 1,"Subdivision" => 2"User" => 3"Template" => 4);
     
     
     
    // определяем таблицу и первичный ключ в ней
     
    if ( !is_int($classID) ) {
     
    $table $db->escape($classID);
     
    $pk $db->escape($classID)."_ID";
     
    $systemTableID $system_tables[$classID];
     
    }
     
    else {
     
    $table "Message".intval($classID);
     
    $pk "Message_ID";
     
    }
     
     
     
    // определяем номер поля и его имя
     
    if ( is_int($field ) ) {
     
    $field_id intval($field);
     
    $field_name $db->get_var("SELECT `Field_Name` FROM `Field` WHERE `Field_ID` = '".$field_id."' ");
     
    }
     
    else {
     
    $field_name $db->escape($field);
     
    $field_id $db->get_var("SELECT `Field_ID` FROM `Field` WHERE `Field_Name` = '".$field_name."' AND ".( $systemTableID "`System_Table_ID` = '".$systemTableID."'" "`Class_ID` = '".$classID."' ")." ");
     
    }
     
    // новое значение
     
    clearstatcache();
     
    $filesize filesize($nc_core->DOCUMENT_ROOT.$src);
     
     
     
    $old_value $db->get_var("SELECT `".$field_name."` FROM `".$table."` WHERE `".$pk."` = '".$message."' ");
     
    $new_value preg_replace("/:(\d+:(/"':'.$filesize.':'$old_value);
     
    $new_value preg_replace("/:(\d+)$/"':'.$filesize$new_value);
     
     
     
    $db->query("UPDATE `".$table."` SET `".$field_name."` = '".$db->escape($new_value)."' WHERE `".$pk."` = '".$message."' ");
     
    // и в таблице Filetable
     
    $db->query("UPDATE `Filetable` SET `File_Size` = '".$filesize."' WHERE `Message_ID` = '".$message."' AND `Field_ID` = '".$field_id."' ");
     
     
     
    return 
    true;
     
    }
     
    }

    pfntм просто оброщаемся через nc_ImageTransform::