Создание водяных знаков с помощью 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
} 
?>

Здесь:

  • $alpha_level - прозрачность: 0 - прозрачное, 100 - полностью непрозрачное
  • $position - позиция водяного знака: ‘right’ - внизу справа, ‘center’ - по центру

Комментариев: 4

  1. XAN:

    Мне понравилось,коротко и ясно))

  2. Spacewalker:

    В коде синтаксическая ошибка:

    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 в коде.

    З.Ы. если хотите, чтобы файл мог быть скачан, вначале сохраните его на диск, а потом выведите его в браузер по линку.

  3. admin:

    Spacewalker, спасибо, исправил.

  4. novik_sasha:

    у меня не выводит картинку… выводит только если ее редактировать в текстовом редакторе!

Оставьте свой отзыв