ФорумПрограммированиеПыхнуть хотите?Готовые решения → Watermark

Watermark

  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 13:20

    ногами не бить, поиск не работает, поэтому пролистнул список тем быстренько и не нашел такой..
    поэтому выложу код
    <?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 &amp;&amp; $watermark_x < $watermark_img_obj_w &amp;&amp; $watermark_y >= 0 &amp;&amp; $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[&#39;alpha&#39;]) / 127), 2);
    $watermark_alpha = $watermark_alpha * $alpha_level;
    $avg_red = self::_get_ave_color($main_rgb[&#39;red&#39;], $watermark_rbg[&#39;red&#39;], $watermark_alpha);
    $avg_green = self::_get_ave_color($main_rgb[&#39;green&#39;], $watermark_rbg[&#39;green&#39;], $watermark_alpha);
    $avg_blue = self::_get_ave_color($main_rgb[&#39;blue&#39;], $watermark_rbg[&#39;blue&#39;], $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);
    }
    }
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 13:30, спустя 9 минут 13 секунд

    NRG, а гугл слабо заюзать?
    adw/0
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 13:36, спустя 6 минут 40 секунд

    adw0rd, посерчил по запросу &quot;site:pyha.ru watermark&quot;, нихуа не нашел
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 22 июля 2009 г. 13:38, спустя 1 минуту 16 секунд

Пожалуйста, авторизуйтесь, чтобы написать комментарий!