Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/37: Рейтинг темы: голосов - 37, средняя оценка - 4.68
IceHash
5 / 5 / 1
Регистрация: 24.09.2011
Сообщений: 53
#1

Скрытие водяных знаков

07.05.2012, 20:41. Просмотров 6735. Ответов 9
Метки нет (Все метки)

Необходимо удалить водяной знак более чем с 2500 изображений. Исходного изображения водяного знака нет, знаки разного типа...
Как можно закрыть водяной знак своим изображением? Можно ли написать какой-либо скрипт на PHP с использованием библиотеки GD? Есть ли готовые решения?

Примеры картинок:
0
Миниатюры
Скрытие водяных знаков   Скрытие водяных знаков  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2012, 20:41
Ответы с готовыми решениями:

Скрытие URL
Здравствуйте. Написал регистрацию, теперь стоит такая задача. Авторизованный...

Скрытие от виджета
Здравствуйте,заранее прошу прощения если не ту рубрику попал:) Имею сайт...

скрытие URL
у меня проблема, делаю интернет магазин при выборе товара ссылка выглядит так -...

Скрытие расширение php
Здравствуйте! Подскажите как скрыть расширение php для всех файлов, кроме...

Скрытие элемента для гостей
Здравствуйте, я не знал где точно написать в форуме PHP или JavaScript, по...

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

PHP редирект (скрытие внешней ссылки от поисковиков)
Здравствуйте. Подскажите, пожалуйста, как правильно можно реализовать...

Автоматическое скрытие ссылок в DLE параметром -hide-
Автоматическое скрытие ссылок в DLE параметром -hide- есть DataLife Engine...

Коды для знаков в кодировке UTF-8
Использую функцию перекодирования из UTF-8 в 1251, построенную по принципу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru