Всем привет)
Решил прикрутить "по своему" watermark (наложение картинки на изображение) в галерею.
И так приступаем f_emo_43.
В файле maincore.php в самом низу до строки if(!empty($title)) $title = $title." - "; пишем следующий код:
// Watermark
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) - ($watermark_img_obj_w));
$main_img_obj_max_x = ceil(($main_img_obj_w) + ($watermark_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) + ($watermark_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);
}
}
После создаем файл watermark.php в корне сайта, и впишем в него следующий код:
<?php
include 'maincore.php';
$watermark = new watermark();
$main_img_obj = imagecreatefromjpeg($_GET['photo']);
$watermark_img_obj = imagecreatefrompng($_GET['watermark']);
$return_img_obj = $watermark->create_watermark($main_img_obj, $watermark_img_obj, 66);
header('Content-Type: image/jpeg');
imagejpeg($return_img_obj, '', 100);
?>
Теперь приступаем к галерее.
В файле photogallery.php заменим строки:
echo "<a href=\"javascript:;\" onclick=\"window.open('showphoto.php?photo_id=".$data['photo_id']."','','scrollbars=yes,toolbar=no,stat
us=no,resizable=yes,width=".($photo_size[0]+20).",height=".($photo_size[1]+20)."')\">";
echo "<img src='".($photo_thumb ? $photo_thumb : $photo_file)."' alt='".$data['photo_filename']."' title='".$locale['453']."' border='0'></a>\n</div>\n";
На
echo "<a href=\"watermark.php?photo=".PHOTODIR.$data['photo_filename']."&watermark=".PHOTOS."watermark.png\" class=\"highslide\" onclick=\"return hs.expand(this)\">";
echo "<img src='watermark.php?photo=".(isset($photo_thumb) ? $photo_thumb : $photo_file)."&watermark=".PHOTOS."watermark.png' alt='".$data['photo_filename']."' title='".$locale['453']."' border='0'></a>\n</div>\n";
При условии если вы уже прикрутили к галерее скрипт highslide.
Теперь нам осталось лишь в папку images/photoalbum положить картинку с ватермарком и обозвать ее watrmark.png.
Все готово! Отписываемся у кого что получилось.
P.S. Вот как у меня вышло http://kiev-mod.ho.ua/photogallery.php?photo_id=3 |
|