Разработка сайтов

Ватермарки своими руками Битрикс

Скрипт создает на лету ватермарку не изменяя исходное изображение 

Пример вызова картинки

<img src="/test/watermark.php?image=kitty.jpg" />


<?
/*СНАЧАЛА ДЕЛАЕМ МАСШТАБ ВАТЕРМАРКИ СОХРАНЯЯ ПРОЗРАЧНОСТЬ*/
//Определяем размер ватермарки и фотки
$size = GetImageSize($_SERVER['DOCUMENT_ROOT'] . '/upload/watermark.png');
$image = imagecreatefromjpeg('img/' . $_GET['image']);

$width = $size[0];
$height = $size[1];

// высчитываем ширину и высоту на основании размеров фотки
$newWidth = imagesx($image) / 2;
$koef = $width / $newWidth;
$newHeight = ceil($height / $koef);

//Создаём пустое изображение
$tmp = ImageCreateTrueColor($newWidth, $newHeight);
imageAlphaBlending($tmp, false);  // для прозрачности 
imageSaveAlpha($tmp, true); // для прозрачности 

//Создаём новое изображение из «старого»
$watermark = ImageCreateFromPng($_SERVER['DOCUMENT_ROOT'] . '/upload/watermark.png');

//Данная функция копирует прямоугольную часть изображения в другое изображение, плавно интерполируя пикселные значения таким образом, что, в частности, уменьшение размера изображения сохранит его чёткость и яркость.
ImageCopyResampled ($tmp, $watermark, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
//Сохраняем полученное изображение
ImagePng($tmp,$_SERVER['DOCUMENT_ROOT'] .  "/upload/watermark_small.png");
imagedestroy($watermark); // чистим память


// Загрузка ватермарки и фото, для которого применяется водяной знак 
$stamp = imagecreatefrompng($_SERVER['DOCUMENT_ROOT'] . '/upload/watermark_small.png');
$im = imagecreatefromjpeg('img/' . $_GET['image']);

$sx = imagesx($stamp);
$sy = imagesy($stamp);

// чтобы по центру фотки была ватермарка
$dest_x = (imagesx($im) - $sx) / 2; 
$dest_y = (imagesy($im) - $sy) / 2;

// Копирование изображения ватермарки на фотографию 
imagecopy($im, $stamp, $dest_x, $dest_y, 0, 0, imagesx($stamp), imagesy($stamp));

// Вывод и освобождение памяти
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);

Допилила бонус. 

Сделала ватермарку прозрачной. 


/*СНАЧАЛА ДЕЛАЕМ МАСШТАБ ВАТЕРМАРКИ СОХРАНЯЯ ПРОЗРАЧНОСТЬ*/
//Определяем размер ватермарки и фотки
$size = GetImageSize($_SERVER['DOCUMENT_ROOT'] . '/upload/watermark.png');
$image = imagecreatefromjpeg('img/' . $_GET['image']);

$width = $size[0];
$height = $size[1];

// высчитываем ширину и высоту на основании размеров фотки
//$newWidth = imagesx($image) / 2;
$newWidth = imagesx($image) * 0.3;
$koef = $width / $newWidth;
$newHeight = ceil($height / $koef);

//Создаём пустое изображение
$tmp = ImageCreateTrueColor($newWidth, $newHeight);
imageAlphaBlending($tmp, false);  // для прозрачности
imageSaveAlpha($tmp, true); // для прозрачности

//Создаём новое изображение из «старого»
$watermark = ImageCreateFromPng($_SERVER['DOCUMENT_ROOT'] . '/upload/watermark.png');

//Данная функция копирует прямоугольную часть изображения в другое изображение, плавно интерполируя пикселные значения таким образом, что, в частности, уменьшение размера изображения сохранит его чёткость и яркость.
ImageCopyResampled ($tmp, $watermark, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
//Сохраняем полученное изображение
ImagePng($tmp,$_SERVER['DOCUMENT_ROOT'] .  "/upload/watermark_small.png");
imagedestroy($watermark); // чистим память



// этот кусочек делает ватермарку прозрачной, но не всю. Можно сделать определенный цвет прозрачным
$fuzz = 0.1;
$im = new Imagick();
$im->readimage($_SERVER['DOCUMENT_ROOT'] . '/upload/watermark_small.png');
$im->setImageFormat('png');
$max = $im->getQuantumRange();
$max = $max["quantumRangeLong"];
$im->trimImage($fuzz * $max);
//$im->transparentPaintImage($im->getImagePixelColor(0, 0), 0.5, $fuzz * $max, FALSE);
$im->transparentPaintImage('#fefefe', 0.5, $fuzz * $max, FALSE); // '#fefefe' - цвет который надо сделать прозрачным , 0.5 - степень прозрачности от 0 до 1
$im->writeImage($_SERVER['DOCUMENT_ROOT'] . '/upload/watermark_small.png');
//header('Content-Type: image/png');
//echo $im->getImageBlob();





// Загрузка ватермарки и фото, для которого применяется водяной знак
$stamp = imagecreatefrompng($_SERVER['DOCUMENT_ROOT'] . '/upload/watermark_small.png');
$im = imagecreatefromjpeg('img/' . $_GET['image']);

$sx = imagesx($stamp);
$sy = imagesy($stamp);

// чтобы по центру фотки была ватермарка
$dest_x = (imagesx($im) - $sx) / 2;
$dest_y = (imagesy($im) - $sy) / 2;

// Копирование изображения ватермарки на фотографию
imagecopy($im, $stamp, $dest_x, $dest_y, 0, 0, imagesx($stamp), imagesy($stamp));

// Вывод и освобождение памяти
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);


Подписка на блог Подпишись на новые материалы от US STUDIO и вы не пропустите интересные статьи от нашей компании