core/api/php/wm.php

119 lines
5.3 KiB
PHP
Raw Normal View History

2022-12-11 13:55:49 +05:00
<?php
/* Генератор ватермарка для сайта галереи */
function watter_mark($image2, $watermark2){
#header('content-type: image/jpeg');
// получаем имя изображения через GET
//$image = $_GET['image'];
// создаём водяной знак
$watermark = imagecreatefrompng($watermark2);
// получаем значения высоты и ширины водяного знака
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
// создаём jpg из оригинального изображения
//$image_path = '/path/to/image/folder/' . $image;
$image = imagecreatefromjpeg($image2);
//если что-то пойдёт не так
if ($image === false) {
return false;
}
$size = getimagesize($image_path);
// помещаем водяной знак на изображение
$dest_x = $size[0] - $watermark_width - 5;
$dest_y = $size[1] - $watermark_height - 5;
imagealphablending($image, true);
imagealphablending($watermark, true);
// создаём новое изображение
imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);
imagejpeg($image, $image2);
// освобождаем память
imagedestroy($image);
imagedestroy($watermark);
}
function add_watermark($img, $text, $font, $r = 128, $g = 128, $b = 128, $alpha = 100)
{
//получаем ширину и высоту исходного изображения
$width = imagesx($img);
$height = imagesy($img);
//угол поворота текста
$angle = -rad2deg(atan2((-$height),($width)));
//добавляем пробелы к строке
$text = " ".$text." ";
$c = imagecolorallocatealpha($img, $r, $g, $b, $alpha);
$size = (($width+$height)/2)*2/strlen($text);
$box = imagettfbbox ( $size, $angle, $font, $text );
$x = $width/2 - abs($box[4] - $box[0])/2;
$y = $height/2 + abs($box[5] - $box[1])/2;
//записываем строку на изображение
imagettftext($img,$size ,$angle, $x, $y, $c, $font, $text);
return $img;
}
/**
* Наложение водяного знака в виде изображения
* @param $oldimage_name - исходное изображение
* @param $new_image_name - выходное изображение
* @return Boolean
*/
function watermark_image($oldimage_name, $new_image_name, $w, $h){
// получаем имя изображения, используемого в качестве водяного знака
#global $image_path;
$image_path = MYDIR . '/img/w.png';
// получаем размеры исходного изображения
list($owidth,$oheight) = getimagesize($oldimage_name);
// задаем размеры для выходного изображения
$width = $w;
$height = $h;
// создаем выходное изображение размерами, указанными выше
$im = imagecreatetruecolor($width, $height);
$img_src = imagecreatefromjpeg($oldimage_name);
// наложение на выходное изображение, исходного
imagecopyresampled($im, $img_src, 0, 0, 0, 0, $width, $height, $owidth, $oheight);
$watermark = imagecreatefrompng($image_path);
// получаем размеры водяного знака
list($w_width, $w_height) = getimagesize($image_path);
// определяем позицию расположения водяного знака
$pos_x = $width - $w_width;
$pos_y = $height - $w_height;
// накладываем водяной знак
imagecopy($im, $watermark, $pos_x, $pos_y, 0, 0, $w_width, $w_height);
// сохраняем выходное изображение, уже с водяным знаком в формате jpg и качеством 100
imagejpeg($im, $new_image_name, 100);
// уничтожаем изображения
imagedestroy($im);
#unlink($oldimage_name);
return true;
}
/*
#header('content-type: image/jpeg');
// получаем имя изображения через GET
$image = $_GET['image'];
// создаём водяной знак
$watermark = imagecreatefrompng('/w.png');
// получаем значения высоты и ширины водяного знака
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
// создаём jpg из оригинального изображения
$image_path = '/' . $image;
$image = imagecreatefromjpeg($image_path);
//если что-то пойдёт не так
if ($image === false) {
return false;
}
$size = getimagesize($image_path);
// помещаем водяной знак на изображение
$dest_x = $size[0] - $watermark_width - 5;
$dest_y = $size[1] - $watermark_height - 5;
imagealphablending($image, true);
imagealphablending($watermark, true);
// создаём новое изображение
imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);
imagejpeg($image);
// освобождаем память
imagedestroy($image);
imagedestroy($watermark);
*/
?>