Наложение водяного знака на фотоВ последние выходные я все-таки решил одну поставленную задачу, которая давно не давала мне покоя. Мне очень хотелось сделать автоматическое наложение водяного знака на фотобъявления на городской доске объявлений города.

 

Для решения этой проблемы были в свое время использованы первые 2 способа:

Способ №1.

Наложение водяного знака на фотографии вручную, путем использования PhotoShopa или иных специализированных программ.

Такой совет не редко встречается в топиках на форумах, когда заходит речь об автоматическом наложения водяного знака на изображения находящиеся на сайте. Не спорю, это тоже выход их ситуации, но он больше применим, когда автор вручную накладывает знаки на скрины для своих статей, но никак не для сайтов которые наполняются автоматически пользователями будь то доски объявлений или простые варезники. Также он применим для ресурсов которые верстаются вручную и на них нет поддержки PHP, например, бесплатные хостинги. Тут как ни крути, о водяных знаках нужно позаботиться заблаговременно. Программ, которые умеют накладывать водяные знаки пачками на изображения различного формата куча, если и достаточно достойные бесплатные приложения.

Плюсы Способа №1

1) возможность выбора водяного знака и его расположения в каждом конкретном случае

2) всегда можно откатиться к оригиналу не сохраняя изменений

3) отличная возможность набить руку в этом направлении )))

Минусы Способа №1

1) Затрачивается много времени.

2) Процесс скачивания, наложения знака, загрузки готовых изображений не автоматизирован.

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

Вывод для себя: Фотошопоп накладываю водяные знаки когда есть время на изображения находящиеся на моем блоге. Для доски объявлений данный способ не уместен.

Способ №2.

Наложение водяного знака на изображение на лету в момент его запроса пользователем или компонентом.

Старый добрый апачи с включенным режимом mod_rewrite и перенаправлением вывода изображения через .htaccess в специальный скрипт и тут не остался без участия. Этот способ в общих чертах изложен также на форуме в этом топике. Таким образом скрипт накладывает на лету водяной знак на изображение, которое запрашивается через браузер. Достаточно интересный вариант, в принципе решает задачу - пользователь в конечном итоге получает изображение с водяным знаком.

Плюсы Способа №2

1) наложение водяного знака на изображения в определенной папке регулируется просто добавлением файла htaccess, дальше уже все делает веб-сервер и скрипт обработчик наложения.

2) не зависит от типа запроса, т.е. накладывает изображение в любом случае как только к нему обращаются (прямой ссылкой из браузера или через всплывающее окно - разницы нет).

3) оригиналы изображений сохраняются, с ними не происходит никаких графических изменений.

Минусы Способа №2

1) Требуется поддержка mod_rewrite.

2) Создается большая нагрузка на сервер, так как при каждом обращении к изображению происходит наложение водяного знака на оригинал и вывод результата в браузер.

3) Не работает на многих однодолларовых хостингах, бывают проблемы с SEF компонентами.

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

Способ №3. Самый передовой и самый оптимальный в моем случае: наложение водяного знака в момент загрузки изображения пользователем на сервер. Обработанное изображение хранится уже в готовом виде.

Плюсы Способа №3

1) Операция обработки изображения происходит один раз и на весь срок его жизни на сайте.

2) Минимальная нагрузка - пользователь получает уже просто картинку.

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

4) Можно накладывать водяной знак-изображение, а можно и текст, например имя сайта, текущую дату, прямую ссылку на изображение в конце то концов.

Минусы Способа №3

1) Требуется хостинг с PHP (в них как правило уже есть поддержка библиотек обработки изображений, например GD).

2) Нужно хоть немножко знать php (как прикрутить и вызвать функции с аргументами на крайняк). И самое главное - нужно хоть чуть чуть думать в каждом конкретном своем случае, а не тупо копировать скрипты с форумов и воняя потом твердить что у вас ничего не работает. Умные люди всегда дадут правильное направление, но никто за тебя ничего делать не будет.

Ну вот собственно я и перешел к 3 способу наложения водяного знака на фотообъявления на своей доске объявлений, созданной на компоненте MarketPlace 1.4.6, что я сделал:

1. На блоге одного очень компетентного программера ManHunter www.manhunter.ru я нашел скрипт-функцию написанную на php отвечающую за вывод водяного знака на изображения. Сам код вы всегда можете взять у него и назвать файл допустим wat.php, или скачать архив по вложении к материалу (только зарегистрированным пользователям):

С удобными авторскими комментами было не трудно разобраться что к чему, таким образом я и решил использовать его возможности. Все копирайты автора в файле сохранены. В общем качаем архив, в нем находится скрипт wat.php, распаковываем и кладем файл wat.php в /components/com_marketplace/.

2. В этом же каталоге компонента MarketPlace открываем php-скрипт write_ad.php, который собственно и отвечает за добавление новых объявлений на нашей доске. Автор нашего любимого компонента Achim Fischer aka Codingfish оказался человеком размеренным, все в кучу сваливать не стал, и даже мне, как я неоднократно говорил, человеку совсем не искушенному в php, не составило труда определить порядок необходимых действий для достижения цели:

Сначала инклудим наш новый файл wat.php, дабы была возможность вызвать функцию, Watermark_PNG_Image которая в нем определена, например после строки 188 файла write_ad.php добавляем:

($mosConfig_absolute_path.'/components/com_marketplace/wat.php');

3. Идем дальше и после строки 342 добавляем следующую строчку:

Watermark_PNG_Image($af_dir_ads.$adid.$itrail.".".$thispicext,$mosConfig_absolute_path.'/components/com_marketplace/marker3.png');

Почему именно после нее? А это для того чтобы скрипт write_ad.php успел сделать мелкие фото из загружаемых без водяного знака, а уже потом, когда он сохранит оригиналы в папку entries, мы обрабатываем их и перезаписываем уже с водяным знаком.

В функции Watermark_PNG_Image аргумент $af_dir_ads.$adid.$itrail.".".$thispicext отвечает за имя файла и его расширение, тут ничего менять не надо! 2й аргумент $mosConfig_absolute_path.'/components/com_marketplace/marker3.png указывает на имя файла в папке компонента, который содержит собственно наш водяной знак. Поэтому положите его в components/com_marketplace/. У меня файл называется marker3.png.

4. Требования к файлу водяного знака, в моем случае для marker3.png следующие:

a) Собственно формат файла должен быть png, но глубина цвета должна быть 8 бит. Имейте в виду, если файл будет с другой глубиной цвета, то при наложении прозрачный цвет будет заменен на черный!

b) Размеры можно подбирать методом тыка, главное не переусердствуйте. Размер моего файла 145х25 пикселей. Ну вот собственно и все, если вы все сделали правильно, то можете тестировать. Думаю вы еще не раз будете редактировать свой файл с водяным знаком, пока не создадите лучший.

2. В случае,если вы хотите отображать не изображение, а текст вместо водяного знака, например название вашей доски или еще что-то, то можете воспользоваться еще одним скриптом от ManHunter, я сохранил его как wat-text.php. Cначала скопируйте шрифт в формате ttf в папку компонента, можете взять например lucida из архива, который вы скачали. Для инициализвации wat-text.php аналогично копируем его в папку компонента и инклудим в write_ad.php:

include($mosConfig_absolute_path.'/components/com_marketplace/wat-text.php');

Но вызов функции несколько отличается своими аргументами: первый это изображние, на которое накладываем текст, как положено не меняем. Второе это путь к нашему шрифт, который будем использовать, 12 - в это размер шрифта, ну и следом сам текст, который хотите наложить.

Watermark_Image($af_dir_ads.$adid.$itrail.".".$thispicext,$mosConfig_absolute_path.'/components/com_marketplace/lucida.ttf',12,'Доска объявлений NeftWeb.ru');

Особенностью функции Watermark_Image является то, что она анализирует фон который находится под местом наложения текста, если фон темный - то цвет шрифта светлый и наоборот.

Место наложения текста на изображения задаются в самом файле wat-text.php. По умолчанию стоит $watermark_position=WATERMARK_RIGHT_BOTTOM - т.е. справа внизу.

Также доступные места наложения текста: WATERMARK_LEFT_BOTTOM - слево внизу, WATERMARK_LEFT_TOP - слева вверху, WATERMARK_RIGHT_TOP - справа вверху и по центру WATERMARK_CENTER. Если вместо нормальных русских букв у вас кракозябры - то проверьте, чтобы ваш текст был сохранен в UFT-8.

Ну вот собственно и все, будут вопросы - отпишитесь.

P.S. Таким путем наложение работает только при создании объявлений через фронтенд, для распространения его функций при редактирования и создании объявлений через админку нужно покопаться, но руки не дошли. Но думаю там все аналогично.

Добавить комментарий

Вы можете оставить комментарий авторизовавшись через любую из представленных социальных сетей ниже:

                 


Защитный код
Обновить