Создание водяных знаков с помощью GDLib
Одной из интересных вещей, которые вы можете сделать с помощью библиотеки работы с графикой в PHP GD, может быть функция, который ставит водяные знаки (watermarks) на изображение. Если говорить вкратце, то watermark - это технология для защиты цифровых изображений от несанкционированного использования путем нанесения на них водяных знаков или подписей.
Для начала создадим в Photoshop картинку (надпись), которую будем использовать как водяной знак для нанесения на изображение и сохраним его как PNG-8 (File->Save for Web->PNG-8):
А теперь - сама функция добавления водяного знака:
<?php
$image = imagecreatefromjpeg('image.jpg');
$watermark = imagecreatefrompng('watermark.png');
$image_watermark = create_watermark($image, $watermark, 'right', 30);
header('Content-Type: image/jpeg');
imagejpeg($image_watermark);
function create_watermark( $image, $watermark, $position = 'right', $alpha_level = 100 )
{
// ширина и высота водяного знака
$width = imagesx($watermark);
$height = imagesy($watermark);
if ( $position == 'right' ) { // водяной знак будет внизу справа
$dest_x = imagesx($image) - $width - 5;
$dest_y = imagesy($image) - $height - 5;
} else { // водяной знак будет по центру
$dest_x = intval(imagesx($image)*0.5) - intval($width*0.5);
$dest_y = intval(imagesy($image)*0.5) - intval($height*0.5);
}
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $width, $height, $alpha_level);
return $image;
}
?>
$image = imagecreatefromjpeg('image.jpg');
$watermark = imagecreatefrompng('watermark.png');
$image_watermark = create_watermark($image, $watermark, 'right', 30);
header('Content-Type: image/jpeg');
imagejpeg($image_watermark);
function create_watermark( $image, $watermark, $position = 'right', $alpha_level = 100 )
{
// ширина и высота водяного знака
$width = imagesx($watermark);
$height = imagesy($watermark);
if ( $position == 'right' ) { // водяной знак будет внизу справа
$dest_x = imagesx($image) - $width - 5;
$dest_y = imagesy($image) - $height - 5;
} else { // водяной знак будет по центру
$dest_x = intval(imagesx($image)*0.5) - intval($width*0.5);
$dest_y = intval(imagesy($image)*0.5) - intval($height*0.5);
}
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $width, $height, $alpha_level);
return $image;
}
?>
Здесь:
- $alpha_level - прозрачность: 0 - прозрачное, 100 - полностью непрозрачное
- $position - позиция водяного знака: ‘right’ - внизу справа, ‘center’ - по центру
XAN:
Мне понравилось,коротко и ясно))
2 Октябрь 2008, 22:06Spacewalker:
В коде синтаксическая ошибка:
imagecopymerge($image_obj, $watermark_obj, $dest_x, $dest_y, 0, 0, $width, $height, $alpha_level);
следует писать:
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $width, $height, $alpha_level);
Также учитывайте, что новые версии GD-библиотеки работают с PNG и не знают что такое GIF (насколько я помню с версии 1.6), а старые - наоборот: не знают PNG, но знают GIF.
поэтому юзайте либо imagecreatefromPNG или imagecreatefromGIF в коде.
З.Ы. если хотите, чтобы файл мог быть скачан, вначале сохраните его на диск, а потом выведите его в браузер по линку.
24 Ноябрь 2008, 18:13admin:
Spacewalker, спасибо, исправил.
24 Ноябрь 2008, 18:54novik_sasha:
у меня не выводит картинку… выводит только если ее редактировать в текстовом редакторе!
30 Апрель 2009, 17:19