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

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

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

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

Собственно сабж!
Как сделать автоналожение водяного знака на картинку среднего и оригинального изображения автоматически.
Есть какой то срикпт?
Помогите пожалуйста задолбали тырить картинки.
25.12.2010, 00:09
Ответить | Цитировать
MipH
Спирин Дмитрий
MipH

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

Берется любая доступная в интернете реализации функции добавления водяного знака, коих мильён, и вызывается в Действии после добавления у компонента.

bbzone@gmail.com | bbz.ru | miph.info | miph.ru
Вы можете обратиться ко мне, если необходима разработка функционала на NetCat
25.12.2010, 10:59
Ответить | Цитировать
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);}

}

echo "
25.12.2010, 11:05
Ответить | Цитировать
xservices

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

Вот я наше допустим такой пример. Подскажите как его правильно будет добавить.
Мне надо что бы картинка была справа внизу
http://pixeljack.ru/blog/125/
25.12.2010, 11:25
Ответить | Цитировать
MipH
Спирин Дмитрий
MipH

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

Положите это куда-нибудь в /netcat/modules/default/function.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);
}

}


В вашем коде есть кусок:
Код:

$photo_path = $DOCUMENT_ROOT.nc_file_path($classID, $message, 'Image', ""); if ($photo_path) nc_ImageTransform::imgResize($photo_path,$photo_path,400,400);


В $photo_path содержится пут к картинке, дальше в IF проверяется, если он есть, то уменьшаем картинку. Так вот, замените IF на:
Код:
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);
}


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

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

Дмитрий ну никак не получаеться.
Вы писали
Положите это куда-нибудь в /netcat/modules/default/function.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 "



Картинку загрузил в /images
25.12.2010, 14:58
Ответить | Цитировать
MipH
Спирин Дмитрий
MipH

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

Давайте научимся использовать BBCODE code для удобства форматирования кода...

Разберитесь с закрывающими фигурными скобками } в конце перед echo , они там явно потерялись .

В общем, довольно сложно объяснять не программисту, что и куда вставлять.

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

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

Просто легче в icq. Я довольно быстро все понимаю. С кавычками да трудно =)
icq 445224, если не трудно. Спасибо, пока попробую сам.
25.12.2010, 15:04
Ответить | Цитировать
xservices

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

за bbcode сори не заметил что есть.
25.12.2010, 15:07
Ответить | Цитировать
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);}

}

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

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

Перед echo должно быть по моим подсчетам 3 фигурныйе скобки.

bbzone@gmail.com | bbz.ru | miph.info | miph.ru
Вы можете обратиться ко мне, если необходима разработка функционала на NetCat
198 196 2012-02-22 14:40:38 10942
Страницы: 1  |  2
Описание проекта