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

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

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

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

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

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

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

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

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

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

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
27941 / 15659 / 960
Регистрация: 15.09.2009
Сообщений: 67,839
Записей в блоге: 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
27941 / 15659 / 960
Регистрация: 15.09.2009
Сообщений: 67,839
Записей в блоге: 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
Привет! Вот еще темы с решениями:

Автоматическое скрытие ссылок в 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