watermark в netcat

jlekapb

Создатель
Регистрация
27 Авг 2010
Сообщения
27
Реакции
6
Добрый день.
Здесь нашёл статью, как наложить watermark

function.inc.php

Делаю так:
Действие после добавления объекта :
Код:
";
ncc_watermark("$f_Picture", "/folder1/logo.png", "$f_Picture", 5, 50);
echo"
При этом фото добавляется в альбом, но знака на ней нет.

Подскажите, пожалуйста, где ошибка.
 
Функция выполняеться? Еще немного смущает путь до картинки, может скрипт просто не может найти изображение.
 
Выдержка из вашей статьи:
При этом картинки успешно добавляется, но watermark так и не отображается.
Спасибо.

Мое личное мнение: лучше всегда хранить исходники, а ватермарки и преобразования проводить уже на выводе.

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

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

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

Мое личное мнение: лучше всегда хранить исходники, а ватермарки и преобразования проводить уже на выводе.
Примеры:
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся (в комментах указано как и что изменить для watermark)
PS Ну естественно, все картинки потом должны складываться в кеш.
Спасибо за информацию, обязательно ознакомлюсь.
Но, информация на англ, что замедлит выполнение задачи.
Хотелось уже сделать с приведённой мной функции, а потом разбираться. Понимаю, что подход не верный, но не всё зависит от меня.
 
Во-первых, вам нужно проверить, что на вашем хостинге подключена библиотека 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);
В-третьих, что самое важно - эта функция не обрабатывает файл и сохраняет его, а обрабатывает файл и выводит его
Потому использовать её нужно не в действии после добавления объекта, а в выводе списке объектов или страницы отдельного объекта.
 
Я правильно понял что, скрипт будет отрабатываться каждый раз при обновлении страницы...А если фотографий сотни...
 
Нет , данный код работать не хочет, надо разбираться в php файлах
 
Я правильно понял что, скрипт будет отрабатываться каждый раз при обновлении страницы...А если фотографий сотни...
решение - добавь скрипт в "действие после добавления объекта" только не забудь его сначала его сгенерить
Нет , данный код работать не хочет, надо разбираться в php файлах
ммм нормально ватермарк работает тока в 4.5... просто в 4.2 вообще нет кода ватермарков.
допиши в netcat/require/classes/nc_imagetransform.class.php вот это если версия меньще 4.5


PHP:
public static function putWatermark_file ( $filepath, $watermark, $mode = 0 ) {
 
$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_src, 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h);
 
// опрделяем, куда копировать ватермарк
 
switch ( $mode ) {
 
case 1 : // левый верхний угол
 
$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 < 0 ) $x = 0;
 
if ( $y < 0 ) $y = 0;
 
// копируем ватермарк
 
imagecopy($img, $img_water, $x, $y, 0, 0, $water_w, $water_h);
 
 
 
//записываем в файл
 
$func = function_exists("image".$src_type) ? "image".$src_type : "imagejpg";
 
// можно задать качество
 
if ( func == "imagejpeg" || $func == "imagepng") {
 
$r = $func($img, $filepath, 95);
 
}
 
else {
 
$r = $func($img, $filepath);
 
}
 
 
 
imagedestroy($img);
 
imagedestroy($img_src);
 
imagedestroy($img_water);
 
 
 
return $r;
 
}
 
 
 
 
 
public static function putWatermark ( $classID, $field, $message, $watermark, $mode = 0 ) {
 
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::
 
Назад
Сверху