За последние 24 часа нас посетили 22558 программистов и 1152 робота. Сейчас ищут 613 программистов ...

Ищу программиста PHP

Тема в разделе "PHP Free-Lance", создана пользователем REM, 28 апр 2020.

  1. REM

    REM Новичок

    С нами с:
    28 апр 2020
    Сообщения:
    2
    Симпатии:
    0
    Нужна библиотека на php или подключаемая к php, которая могла бы убирать по шаблону в автоматическом режиме водяные знаки с изображений, в том числе с изображений у которых не белый фон. Водяные знаки прозрачные, либо монотонные, разные вариации.
     

    Вложения:

    • 14.jpg
      14.jpg
      Размер файла:
      273,8 КБ
      Просмотров:
      9
    • 5.jpg
      5.jpg
      Размер файла:
      333,3 КБ
      Просмотров:
      9
  2. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    нагуглилось вот это:

    PHP:
    1. <?php
    2. // Исходное изображение
    3. $sourFile = 's.jpg';
    4. // Маска-watermark
    5. $maskFile = 'm.png';
    6. // Конечное изображение
    7. $saveFile = 'd.jpg';
    8. // Открываем исходное изображение
    9. $sour = imageCreateFromJpeg($sourFile);
    10. // Открываем маску
    11. $mask = imageCreateFromPng($maskFile);
    12. // Получаем высоту и ширину изображения
    13. $imgSize = getImageSize($sourFile);
    14. $imgWidth = $imgSize[0];
    15. $imgHeight = $imgSize[1];
    16. // Создаем изображение, куда будет копировать конечно изображение
    17. $dest = imageCreateTrueColor($imgWidth, $imgHeight);
    18. // Бегаем по высоте
    19. for ($y = 0; $y < $imgHeight; $y++) {
    20.     // Бегаем по ширине
    21.     for ($x = 0; $x < $imgWidth; $x++) {
    22.         // Получаем цвета пикселя с вотермарка
    23.         $SourRgb = getPixColor($sour, $x, $y);
    24.         // Получаем цвета пикселя с маски
    25.         $MaskRgb = getPixColor($mask, $x, $y);
    26.         // Обращаем цвет RBG в обратную строну
    27.         $red   = unBlend($SourRgb['r'], $MaskRgb['r'], $MaskRgb['a']);
    28.         $green = unBlend($SourRgb['g'], $MaskRgb['g'], $MaskRgb['a']);
    29.         $blue  = unBlend($SourRgb['b'], $MaskRgb['b'], $MaskRgb['a']);
    30.         // Соединяем цвета в формат RGB
    31.         $pixelcolor = ( $red << 16 ) | ( $green << 8 ) | $blue ;
    32.         imagesetpixel($dest, $x, $y, $pixelcolor);
    33.     }
    34. }
    35. // Сохраняем чистое изображение
    36. imagejpeg($dest, $saveFile);
    37. imagedestroy($dest);
    38. /**
    39. * Обращает цвет вотермарка в исходный цвет
    40. * @param integer $pDest Цвет вотермарка
    41. * @param integer $pMask Цвет маски
    42. * @param float $pAlpha уровень прозрачности. От 0(полностью прозрачно) до 1(полностью непрозрачно)
    43. * @return integer
    44. */
    45. function unBlend( $pDest, $pMask, $pAlpha ){
    46.     $color = $pMask;
    47.     // Если $pMask == 1, то обратить не получится
    48.     if ( $pAlpha != 1 ){
    49.         // Обратная формула от формулы наложения вотермарка ( dest = ( sour + ( mask - sour ) * alpha )
    50.         $color = ( $pDest - $pAlpha * $pMask ) / ( 1 - $pAlpha );
    51.         // Не выходим ли мы запределы 0..255
    52.         $color = $color < 0 ? 0 : round($color);
    53.         $color = $color > 255 ? 255 : $color;
    54.     }
    55.     return $color;
    56. }
    57. /**
    58. * Получаем цвет пикселя с прозрачностью.
    59. * Возвращает в формате array('r'=>int, 'g'=>int, 'b'=>int, 'a'=>float);
    60. * @param gdImage $pImage Handle на изображение
    61. * @param integer $pX позиция по X
    62. * @param integer $pY позиция по Y
    63. * @return array
    64. */
    65. function getPixColor($pImage, $pX, $pY){
    66.     // Получаем цвет изображения
    67.     $rgb = imagecolorat($pImage, $pX, $pY);
    68.     // Преобразуем
    69.     $red = ($rgb >> 16) & 0xFF;
    70.     $green = ($rgb >> 8) & 0xFF;
    71.     $blue = $rgb & 0xFF;
    72.     // Преобразуем alpha, так как в PNG 127 это полная прозрачность, а 0 - не прозрачность
    73.     $alpha = abs(( ($rgb >> 24) & 0xFF ) / 127 - 1);
    74.     return array('r'=>$red, 'g'=>$green, 'b' => $blue, 'a' => $alpha );
    75. }
    76. ?>
     
  3. REM

    REM Новичок

    С нами с:
    28 апр 2020
    Сообщения:
    2
    Симпатии:
    0
    спасибо, но тут для фиксированого размера