Регистрация
Вход через соцсети
Восстановление пароля

Водяные знаки на картинки

Новый топик
Страницы: 1  |  2
25.12.2010, 15:27
Ответить | Цитировать
xservices

Зарегистрирован:
2010-11-09
Сообщений: 23

да я уже как ни ставлю скобки не хочет создавать. можешь подсказать?
может скрипт в default не вызываеться? может его в imagetransform как то запихнуть?
25.12.2010, 15:28
Ответить | Цитировать
xservices

Зарегистрирован:
2010-11-09
Сообщений: 23

functions.inc.php

Код:

<?

#создание водяного знака



class watermark{





function create_watermark( $main_img_obj, $watermark_img_obj, $alpha_level = 100 ) {

$alpha_level /= 100;





$main_img_obj_w = imagesx( $main_img_obj );

$main_img_obj_h = imagesy( $main_img_obj );

$watermark_img_obj_w = imagesx( $watermark_img_obj );

$watermark_img_obj_h = imagesy( $watermark_img_obj );



/*

$main_img_obj_min_x = floor( ( $main_img_obj_w / 2 ) - ( $watermark_img_obj_w / 2 ) );

$main_img_obj_max_x = ceil( ( $main_img_obj_w / 2 ) + ( $watermark_img_obj_w / 2 ) );

$main_img_obj_min_y = floor( ( $main_img_obj_h / 2 ) - ( $watermark_img_obj_h / 2 ) );

$main_img_obj_max_y = ceil( ( $main_img_obj_h / 2 ) + ( $watermark_img_obj_h / 2 ) );

*/

$main_img_obj_min_x = floor( $main_img_obj_w - $watermark_img_obj_w );

$main_img_obj_max_x = ceil( $main_img_obj_w);

$main_img_obj_min_y = floor( $main_img_obj_h - $watermark_img_obj_h);

$main_img_obj_max_y = ceil( $main_img_obj_h);



$return_img = imagecreatetruecolor( $main_img_obj_w, $main_img_obj_h );





for( $y = 0; $y < $main_img_obj_h; $y++ ) {

for( $x = 0; $x < $main_img_obj_w; $x++ ) {

$return_color = NULL;





$watermark_x = $x - $main_img_obj_min_x;

$watermark_y = $y - $main_img_obj_min_y;





$main_rgb = imagecolorsforindex( $main_img_obj, imagecolorat( $main_img_obj, $x, $y ) );





if ( $watermark_x >= 0 && $watermark_x < $watermark_img_obj_w &&

$watermark_y >= 0 && $watermark_y < $watermark_img_obj_h ) {

$watermark_rbg = imagecolorsforindex( $watermark_img_obj, imagecolorat( $watermark_img_obj, $watermark_x, $watermark_y ) );





$watermark_alpha = round( ( ( 127 - $watermark_rbg['alpha'] ) / 127 ), 2 );

$watermark_alpha = $watermark_alpha * $alpha_level;





$avg_red = $this->_get_ave_color( $main_rgb['red'], $watermark_rbg['red'], $watermark_alpha );

$avg_green = $this->_get_ave_color( $main_rgb['green'], $watermark_rbg['green'], $watermark_alpha );

$avg_blue = $this->_get_ave_color( $main_rgb['blue'], $watermark_rbg['blue'], $watermark_alpha );





$return_color = $this->_get_image_color( $return_img, $avg_red, $avg_green, $avg_blue );





} else {

$return_color = imagecolorat( $main_img_obj, $x, $y );



}





imagesetpixel( $return_img, $x, $y, $return_color );



}

}





return $return_img;



}





function _get_ave_color( $color_a, $color_b, $alpha_level ) {

return round( ( ( $color_a * ( 1 - $alpha_level ) ) + ( $color_b * $alpha_level ) ) );

}





function _get_image_color($im, $r, $g, $b) {

$c=imagecolorexact($im, $r, $g, $b);

if ($c!=-1) return $c;

$c=imagecolorallocate($im, $r, $g, $b);

if ($c!=-1) return $c;

return imagecolorclosest($im, $r, $g, $b);

}



}



?>


А это в обьекте добавления

Код:

";
if($inside_admin) {
ob_end_clean();
header("Location: ".$goBackLink."&inside_admin=1");
exit;
}
else {
echo $IsChecked ? NETCAT_MODERATION_MSG_OBJADD : NETCAT_MODERATION_MSG_OBJADDMOD;
echo "<br><br>".$goBack;
}




// если файл был закачан

if ($_FILES['f_Image'][size] != 0 ) {

require_once($INCLUDE_FOLDER."classes/nc_imagetransform.class.php");


// создать превью
nc_ImageTransform::createThumb('Image','Image_thumb',100,83);


// Уменьшить оригинал пропорционально 400x400
if ($_FILES[f_Image][size]!=0 && $_FILES[f_Image][type]!='') { eval(listQuery("SELECT CustomSettings FROM Sub_Class WHERE Sub_Class_ID='$cc'","\$data[CustomSettings]")); global $nc_core; require_once($nc_core->INCLUDE_FOLDER."classes/nc_imagetransform.class.php"); $photo_path = $DOCUMENT_ROOT.nc_file_path($classID, $message, 'Image', ""); if ($photo_path) {

nc_ImageTransform::imgResize($photo_path,$photo_path,400,400);

// сюда надо вставить определение параметра $ext

// если только jpg, то можно просто написать $ext = 'jpg'

// иначе каким-то образом выяснить тип файла

if ($ext == 'jpg' || $ext == 'jpeg') {

$img = imagecreatefromjpeg($photo_path);



}

if ($ext == 'gif') {



$img = imagecreatefromgif($photo_path);

}



if ($ext == 'png') {



$img = imagecreatefrompng($photo_path);

}



$watermark = new watermark();



$main_img_obj = $img;



// путь к картинке с водяным знаком

$watermark_img_obj = imagecreatefrompng($_SERVER["DOCUMENT_ROOT"]."/images/watermark.png");



# создаем изображение с водяным знаком - значение прозрачности альфа-канала водяного знака установим в 66%

$return_img_obj = $watermark->create_watermark( $main_img_obj, $watermark_img_obj, 70 );



imagejpeg($return_img_obj,$photo_path);

}
echo "
25.12.2010, 15:47
Ответить | Цитировать
MipH
Спирин Дмитрий
MipH

Зарегистрирован:
2004-12-22
Сообщений: 252

// сюда надо вставить определение параметра $ext
// если только jpg, то можно просто написать $ext = 'jpg'
// иначе каким-то образом выяснить тип файла
---
специально написал эти комментарии...
напиши вместо них $ext = 'jpg';

Вместо
imagejpeg($return_img_obj,$photo_path);
}
echo "

Напиши:
imagejpeg($return_img_obj,$photo_path);
}
}
}
echo "

bbzone@gmail.com | bbz.ru | miph.info | miph.ru
Вы можете обратиться ко мне, если необходима разработка функционала на NetCat
25.12.2010, 15:53
Ответить | Цитировать
xservices

Зарегистрирован:
2010-11-09
Сообщений: 23

в обькте добавления сделал как ты сказал

Код:

";
if($inside_admin) {
ob_end_clean();
header("Location: ".$goBackLink."&inside_admin=1");
exit;
}
else {
echo $IsChecked ? NETCAT_MODERATION_MSG_OBJADD : NETCAT_MODERATION_MSG_OBJADDMOD;
echo "<br><br>".$goBack;
}




// если файл был закачан

if ($_FILES['f_Image'][size] != 0 ) {

require_once($INCLUDE_FOLDER."classes/nc_imagetransform.class.php");


// создать превью
nc_ImageTransform::createThumb('Image','Image_thumb',100,83);


// Уменьшить оригинал пропорционально 400x400
if ($_FILES[f_Image][size]!=0 && $_FILES[f_Image][type]!='') { eval(listQuery("SELECT CustomSettings FROM Sub_Class WHERE Sub_Class_ID='$cc'","\$data[CustomSettings]")); global $nc_core; require_once($nc_core->INCLUDE_FOLDER."classes/nc_imagetransform.class.php"); $photo_path = $DOCUMENT_ROOT.nc_file_path($classID, $message, 'Image', "");
if ($photo_path) {

nc_ImageTransform::imgResize($photo_path,$photo_path,400,400);

// сюда надо вставить определение параметра $ext

$ext = 'jpg'

// иначе каким-то образом выяснить тип файла

if ($ext == 'jpg' || $ext == 'jpeg') {

$img = imagecreatefromjpeg($photo_path);



}

if ($ext == 'gif') {



$img = imagecreatefromgif($photo_path);

}



if ($ext == 'png') {



$img = imagecreatefrompng($photo_path);

}



$watermark = new watermark();



$main_img_obj = $img;



// путь к картинке с водяным знаком

$watermark_img_obj = imagecreatefrompng($_SERVER["DOCUMENT_ROOT"]."/images/watermark.png");



# создаем изображение с водяным знаком - значение прозрачности альфа-канала водяного знака установим в 66%

$return_img_obj = $watermark->create_watermark( $main_img_obj, $watermark_img_obj, 70 );



imagejpeg($return_img_obj,$photo_path);
}
}
}
echo "


в functions.inc.php так же осталось.
Не работает.
Добавил картинку нет знака.
Все верно сделал?
25.12.2010, 16:16
Ответить | Цитировать
MipH
Спирин Дмитрий
MipH

Зарегистрирован:
2004-12-22
Сообщений: 252

Мой последний коммент. Дальше или самостоятельно, или кому-то денег.
$ext = 'jpg'
должно быть, как я и написал:
$ext = 'jpg';

bbzone@gmail.com | bbz.ru | miph.info | miph.ru
Вы можете обратиться ко мне, если необходима разработка функционала на NetCat
25.12.2010, 17:54
Ответить | Цитировать
xservices

Зарегистрирован:
2010-11-09
Сообщений: 23

Не заработало, но все равно спасибо за помошь, буду разбираться.
11.04.2011, 12:56
Ответить | Цитировать
Roman
Infoservis

Зарегистрирован:
2006-06-01
Сообщений: 28

Заменил $_SERVER["DOCUMENT_ROOT"] на $DOCUMENT_ROOT и все заработало
22.02.2012, 14:40
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

Еще есть способ
Почитай "руководство разработчика 4.6" Самая последняя страница. Там описана функция

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
198 196 2012-02-22 14:40:38 10942
Страницы: 1  |  2
Описание проекта