смысть водяной знак с фото

AB
На сайте с 16.11.2011
Offline
78
#121
mr-faq:
Поиск по картинкам в помощь

а можно подробнее разжевать как искать.. вроде название картинки 69dd7a40.jpg но у меня не выдает результата поиска(( а нажимаю на вашу ссылку то результат есть

спасибо

D
На сайте с 14.01.2007
Offline
153
#122

как и обещал:


<?php
for ($d=40;$d<41;$d+=1){
//chernaya fotka so znakom
$im=imagecreatefromjpeg("__1.jpg");
$s=array();
$c=0;
for ($i=1;$i<201;$i++){
if (!isset($s[$i])){
$s[$i]=array();
}
for ($j=1;$j<201;$j++){
$ic=imagecolorat($im,$i,$j);
if ($ic != 0){

$f=imagecolorsforindex ($im,$ic);
//var_dump($f);
//echo "<br>";
if ($f['red']>5 || $f['green']>5 || $f['blue']>5)
$s[$i][$j]=array('red'=>$f['red']*100/$d,'green'=>$f['green']*100/$d,'blue'=>$f['blue']*100/$d);
}
}
}
//fotka so znakom
$im=imagecreatefromjpeg("a.jpg");
for ($i=1;$i<201;$i++){
for ($j=1;$j<201;$j++){
if (is_array($s[$i][$j])){
$f=imagecolorsforindex ($im,imagecolorat($im,$i,$j));
$f=array('red'=>intval($s[$i][$j]['red']-($s[$i][$j]['red']-$f['red'])/(100-$d)*100),'green'=>intval($s[$i][$j]['green']-($s[$i][$j]['green']-$f['green'])/(100-$d)*100),'blue'=>intval($s[$i][$j]['blue']-($s[$i][$j]['blue']-$f['blue'])/(100-$d)*100));
if ($f['red']>255){
$f['red']=255;
}
if ($f['red']<0){
$f['red']=0;
}
if ($f['green']>255){
$f['green']=255;
}
if ($f['green']<0){
$f['green']=0;
}
if ($f['blue']>255){
$f['blue']=255;
}
if ($f['blue']<0){
$f['blue']=0;
}
$nc=imagecolorallocate($im,$f['red'],$f['green'],$f['blue']);
imagesetpixel($im,$i,$j,$nc);
}
}
}
imagejpeg($im,$d."a.jpg",100);
}

jpg a.jpg
jpg 40a.jpg
jpg __1.jpg
N
На сайте с 06.05.2007
Offline
419
#123

Dinozavr, вроде ничего, но слишком простой и резкий водяной знак.

Давайте теперь усилим эффект краев на знаке:

предположим, талантливый художник повторил водяной знак и вам известен каждый пиксель исходного знака и координаты наложения .

Я сделал сам водяной знак png с полупрозрачностью. Выглядит как белый, но он не белый. Если откроете в фотошопе, то увидите "шашечки" на фоне. Цвет изображения намерено белый.

Наложил с прозрачностью 90% и заранее вам об этом говорю. Типа как бы вы угадали или подобрали параметры с которыми накладывает знаки сайт.

Что получится по вашему алгоритму в этом случае?

png png-24-watermark.png
png blend-90proc.png
Кнопка вызова админа ()
D
На сайте с 14.01.2007
Offline
153
#124
netwind:
Что получится по вашему алгоритму в этом случае?

фигня получается. отличия до и после практически нет

N
На сайте с 06.05.2007
Offline
419
#125

госпади, ну а так ? blend opacity - 60%

и вы все-таки попробуйте убрать предыдущий знак. может он и не похож на водяной знак, но предположительно проблемные зоны там намеренно гипертрофированы.

png zorro-60proc-png.png
png zorro-watermark.png
D
На сайте с 14.01.2007
Offline
153
#126

не, я с этим алгоритмом завязал:) итак слишком много времени убил на это.

идея ясна, алгоритм сверху, его ограничения тоже вроде ясны.

так что энтузиасты вперёд

Хорс
На сайте с 14.12.2010
Offline
21
#127

Я бы по другому сделал (сейчас лень).

Загружаем на фотохостинг, который ставит вотермарки, нейтрально серое изображение.

Полученное, обрабатываем попиксельно и строим матрицу отклонений в цветовом пространстве HSB (HSL), а не в RGB. То есть:

  • координата по ширине
  • координата по высоте
  • отклонение тона в градусах (5 знаков после запятой)
  • отклонение насыщенности в процентах (5 знаков после запятой)
  • отклонение яркости в процентах (5 знаков после запятой)

В нашем случае, можно даже не учитывать нелинейность цветового пространства... не Сикстинскую капеллу восстанавливаем. :)

А теперь, имея матрицу, можно приступить к правкам (в цикле, по всей плоскости):

  • читаем пиксель,
  • берём из матрицы соответствующее положение
  • RGB -> HSB
  • вычитаем / добавляем угол тонового искажения (в диапазоне 0-360)
  • вычитаем / добавляем процент искажения насыщенности (в диапазоне 0-100)
  • вычитаем / добавляем процент искажения яркости (в диапазоне 0-100)
  • HSB -> RGB
  • сохраняем пиксель

В теории, должно работать. 🍿

anton831
На сайте с 25.05.2011
Offline
71
#128
Dinozavr:
ну что, подтверждается поговорка: язык мой - враг мой :)
а конкретно "водяной знак любой сложности".
большие по площади знаки удаляются без проблем, но вот на краях или на тонких линиях начинаются проблемы, потому что все библиотеки начинают "оптимизировать" и делать "красивые" переходы, которые уже восстановлению автоматом не подлежат.
вот то что у меня получилось + пример с удалением большого знака

Ну вобщем то, далеко не худший вариант, с учетом того, что вотермарк рисовался в векторе, в два слоя с обводкой, теннями и градиетном на "расческах".:)

Так что можно сказать - зачет!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий