Стандартным методом защиты изображений на веб-сайтах является так называемый watermark. Он бывает статический и динамический. Статический это когда картинка хранится на сервере с уже добавленным watermark, динамический это когда watermark добавляется при скачивании картинки с сервера. Статический вариант рассматривать не будем, так как он обладает рядом очевидных недостатков.
Что есть в интернете на тему watermark
Ну во-первых есть некоторое количество плагинов для WordPress, потом можно найти такой скрипт:
<?php // watermark.php // Path the the requested file $path = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']; // Load the requested image $image = imagecreatefromstring(file_get_contents($path)); $w = imagesx($image); $h = imagesy($image); // Load the watermark image $watermark = imagecreatefrompng('watermark.png'); $ww = imagesx($watermark); $wh = imagesy($watermark); // Merge watermark upon the original image (centred) imagecopy($image, $watermark, (($w/2)-($ww/2)), (($h/2)-($wh/2)), 0, 0, $ww, $wh); imagealphablending($image, false); imagesavealpha($image, true); // Send the image header('Content-type: image/png'); imagepng($image); exit(); ?>
этот скрипт просто напросто добавляет watermark.png поверх исходного изображения. Скрипт рабочий, в увеличенном виде получается вот такая картинка:
тут как видно прозрачность исходного изображения сохраняется.
но обладает рядом недостатков:
- Иногда наблюдается вот такой странный эффект, когда у изображения после масштабирования посредине возникает белый квадрат:
это дело как-то связано с функциями imagealphablending и imagesavealpha. Возможно, есть какая специальная графическая библиотека, которая умеет работать alpha blending-ом. - Он хорошо работает только для картинок с примерно одинаковым размером, так как watermark.png не масштабируется.
Какой watermark надо сделать
Нужен скрипт watermark-а, аналогичный приведенному выше, который на вход получает исходное изображение и на выходе выдаёт изображение с watermark, но без указанных недостатков. В идеале, скрипт должен дорисовывать прозрачный текст с тонкими полупрозрачными границами наискосок с левого верхнего угла в правый нижний, при этом размер шрифта должен выбираться в зависимости от размера изображения. Текст должен задаваться как параметр скрипта. В упрощенном варианте можно добавлять повторяющийся текст несколько раз, но это только в том случае если не получится реализовать первый вариант. Цвет текста и степень прозрачности должны задаваться в конфигурационном файле. Также надо задавать в конфигурационном файле отступы от края в процентах.
Примеры изображений которые должны получиться (можно увеличить кликом):
все изображения в формате png. Слева прозрачное изображение с полупрозрачной тенью, тень после добавления watermark-а должна остаться прозрачной и через неё должен просвечивать фон сайта, как на правой и средней картинке. Логотип тут внутри полностью прозрачный, а прозрачность границ должна задаваться параметром скрипта, тут логотип на правой картинке более прозрачный чем на левой. Текст должен отображаться под углом 45° с учетом отступов заданных в процентах через параметры скрипта.
Вот как выглядит watermark без апельсинов:
понятное дело, что в PHP нет встроенных функций для отображения такого прозрачного текста, но может быть есть какая-то графическая библиотека с PHP-интерфейсом, которую можно инсталлировать на сервере?
Какие PHP функции можно использовать для реализации Watermark
Нарисовать текст под углом можно с помощью стандартных PHP функций:
- imagettfbbox – измерение текста
- imagettftext – рисование текста под углом
- imagecopymerge – наложение с заданной прозрачностью
- imagecolorallocatealpha – рисование прозрачным цветом, при использовании этой функции не надо создавать дополнительное изображение
при этом эффекта тени можно добиться с помощью сдвига текста.
я чайник. по-ходу, интересная информация, но было бы приятней, если бы при кликании на картинки они бы открывались в новом окне, а то получается, я открыл, посмотрел, закрыл и блин…. сайта нет, опять лезешь в поисковик и ищешь сайт
2 начало хорошее, но концовка… может спец и разберется, а почему бы не написать ещё 2000 знаков для того, чтоб я мог конкретно это применить на своём сайте? Имею ввиду… объяснить как для чайников, таких как я. Ведь, спецы , думаю всё это уже давно знают…
С уважением, Я
пс кстати, эта «объяснялка» и рейтинг сайта повысит
Комментарий by сла — 25 мая 2012 @ 12:14
Здравсвуйте, я профи)
чтобы картинка открывалась в новом окне можно использовать jQuery или если ваш сайт под Joomla или WordPress, например, то использовать готовый плагин, это уже к watermark не относится.
Комментарий by admin — 25 мая 2012 @ 13:33
А куда вставлять этот код?
Комментарий by Иван — 9 июля 2012 @ 19:16
если Apache под Linux то можно испльзовать mod_rewrite и добавить в .htaccess вызов этого кода для jpg и png
Комментарий by admin — 9 июля 2012 @ 22:05