поэтому выложу код
<?php
class Watermark
{
public static function create($main_img_path, $watermark_img_path, $alpha_level = 100, $otstup = 25, $corner = 0)
{
$main_img_obj = imagecreatefromjpeg($main_img_path);
$watermark_img_obj = imagecreatefrompng($watermark_img_path);
$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);
switch ($corner) {
case (1):
$main_img_obj_min_x = $main_img_obj_w - $otstup - $watermark_img_obj_w;
$main_img_obj_max_x = $main_img_obj_w - $otstup;
$main_img_obj_min_y = $otstup;
$main_img_obj_max_y = $otstup + $watermark_img_obj_h;
break;
case (2):
$main_img_obj_min_x = $main_img_obj_w - $otstup - $watermark_img_obj_w;
$main_img_obj_max_x = $main_img_obj_w - $otstup;
$main_img_obj_min_y = $main_img_obj_h - $otstup - $watermark_img_obj_h;
$main_img_obj_max_y = $main_img_obj_h - $otstup;
break;
case (3):
$main_img_obj_min_x = $otstup;
$main_img_obj_max_x = $otstup + $watermark_img_obj_w;
$main_img_obj_min_y = $main_img_obj_h - $otstup - $watermark_img_obj_h;
$main_img_obj_max_y = $main_img_obj_h - $otstup;
break;
case (4):
$main_img_obj_min_x = ($main_img_obj_w / 2) - ($watermark_img_obj_w / 2);
$main_img_obj_max_x = ($main_img_obj_w / 2) + ($watermark_img_obj_w / 2);
$main_img_obj_min_y = ($main_img_obj_h / 2) - ($watermark_img_obj_h / 2);
$main_img_obj_max_y = ($main_img_obj_h / 2) + ($watermark_img_obj_h / 2);
break;
default:
$main_img_obj_min_x = $otstup;
$main_img_obj_max_x = $otstup + $watermark_img_obj_w;
$main_img_obj_min_y = $otstup;
$main_img_obj_max_y = $otstup + $watermark_img_obj_h;
break;
}
$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 = self::_get_ave_color($main_rgb['red'], $watermark_rbg['red'], $watermark_alpha);
$avg_green = self::_get_ave_color($main_rgb['green'], $watermark_rbg['green'], $watermark_alpha);
$avg_blue = self::_get_ave_color($main_rgb['blue'], $watermark_rbg['blue'], $watermark_alpha);
$return_color = self::_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);
}
}
imagejpeg($return_img, $main_img_path);
}
private static function _get_ave_color($color_a, $color_b, $alpha_level)
{
return round((($color_a * (1 - $alpha_level)) + ($color_b * $alpha_level)));
}
private static 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);
}
}