Скрипт создает на лету ватермарку не изменяя исходное изображение
Пример вызова картинки
<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); |