Watermark (водяные знаки) на изображении в WordPress
Доброго времени, читатели www.k-max.name! Сегодня опишу маленькое HOWTO, как на WordPress реализовать водяные знаки на изображениях с помощью php и apache (.htaccess). Самое интересное, что не понадобится нам никаких плагинов! При этом, данное решение вполне применимо к другим движкам. Итак, во первых, добавим в файл .htaccess следующие строки:
# enable watermark RewriteRule ^(.*)wp-content/uploads/(.*(jpg|jpeg|gif|png))$ $1watermark.php?img=wp-content/uploads/$2
Согласно данного правила, все пути, начинающиеся на wp-content/uploads/ и заканчивающиеся на jpg, jpeg, gif или png будут заменены строкой watermark.php?src=wp-content/uploads/... Это позволяет оставлять неизменными исходные изображения и не применять обработчик для таких файлов, как архивы и др. Соответственно, заменив путь wp-content/uploads/на свой можно применить обработку изображений для другого движка.
Кроме этого, необходимо положить в корень сайта файл с именем watermark.png. Это файл самого водяного знака, который будет наложен на основное изображение. Так же, необходимо положить файл empty.png, который содержит 1 прозрачный пиксель и накладывается на маленькие изображения.
Далее, необходимо создать файл watermark.php со следующим содержимым и также положить его в корень сайта:
<?php
/*
* Блог любителя экспериментов
* http://www.k-max.name/
*/
// получаем переданный в GET параметр img
$img= $_GET['img'];
// задаем минимальное разрешение, для которого не нужен большой водяной знак
// и на основании размера применяем соответствующий png-файл
$size = getimagesize($img);
if ($size[0]<100 || $size[1]<100 ) {
$watermark = imagecreatefrompng('empty.png');
} else {
$watermark = imagecreatefrompng('watermark.png');
}
$watermark_w = imagesx($watermark);
$watermark_h = imagesy($watermark);
// обрабатываем gif
if(eregi('.gif',$img)) {
$image = imagecreatefromgif($img);
$size = getimagesize($img);
$dest_x = $size[0] - $watermark_w - 0;
$dest_y = $size[1] - $watermark_h - 0;
imagealphablending($watermark, true);
header('Content-type: mage/gif');
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_w, $watermark_h, 50);
imagegif($image, "", 100);
}
// обрабатываем jpeg
elseif(eregi('.jpeg',$img)||eregi('.jpg',$img)) {
$image = imagecreatefromjpeg($img);
$size = getimagesize($img);
$dest_x = $size[0] - $watermark_w - 0;
$dest_y = $size[1] - $watermark_h - 0;
imagealphablending($watermark, true);
header('content-type: image/jpeg');
imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_w, $watermark_h);
imagejpeg($image,"", 100);
}
// обрабатываем png
elseif(eregi('.png',$img)) {
$image = imagecreatefrompng($img);
$size = getimagesize($img);
$dest_x = $size[0] - $watermark_w - 0;
$dest_y = $size[1] - $watermark_h - 0;
imagesavealpha($image, true);
imagealphablending($watermark, true);
header('Content-type: image/png');
imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_w, $watermark_h);
imagepng($image);
}
else {
exit("Изображение не имеет формат jpg, gif или png.");
}
// освобождаем память
imagedestroy($image);
imagedestroy($watermark);
?>
Готовый архив можно скачать ниже и распаковать себе в корневой каталог блога. В архиве отсутствует файл .htaccess, чтобы вы не заменили свои настройки wordpress, поэтому не забудьте добавить вышеуказанную строку.
Известные баги:
- на изображениях gif - не сохраняется прозрачность водяного знака
- на png с 8-bit политрой так же не сохраняется прозрачность водяного знака
Буду благодарен за решение данной проблемы.
Скачать watermark для изображений WordPress.
С Уважением, Mc.Sim!
Буду рад Вашим благодарностям на:
Яндекс деньги: 41001320540884
WebMoney.WMZ: Z400409137923
WebMoney.WMR: R726484058259