/**
* Добавляет водяной знак к картинке.
* @param type $image - путь до картинки на сервере
* @return boolean
*/
public function addWatterMark($image) {
$filename = $image;
if (!file_exists('uploads/watermark/watermark.png')) {
return false;
}
$size_format = getimagesize($image);
$format = strtolower(substr($size_format['mime'], strpos($size_format['mime'], '/') + 1));
// создаём водяной знак
$watermark = imagecreatefrompng('uploads/watermark/watermark.png');
imagealphablending($watermark, false);
imageSaveAlpha($watermark, true);
// получаем значения высоты и ширины водяного знака
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
// создаём jpg из оригинального изображения
$image_path = $image;
switch ($format) {
case 'png':
$image = imagecreatefrompng($image_path);
$w = imagesx($image);
$h = imagesy($image);
$imageTrans = imagecreatetruecolor($w, $h);
imagealphablending($imageTrans, false);
imageSaveAlpha($imageTrans, true);
$col = imagecolorallocate($imageTrans, 0, 0, 0);
imagefilledrectangle($imageTrans, 0, 0, $w, $h, $col);
imagealphablending($imageTrans, true);
break;
case 'gif':
$image = imagecreatefromgif($image_path);
break;
default:
$image = imagecreatefromjpeg($image_path);
}
//если что-то пойдёт не так
if ($image === false) {
return false;
}
$size = getimagesize($image_path);
// Задаем размер ватермарка относительно размера картинки
// ! возможно ошибка, ватермарк будет вылазить за границы очень длинных и узких картинок !
if ($size[0] >= $size[1]) { // если ширина больше, то считаем относительно нее
$watermark_width_real = $size[0] * 0.28;
$watermark_height_real = $watermark_width_real / $watermark_width * $watermark_height;
}else{ // Иначе относительно высоты
$watermark_height_real = $size[1] * 0.07;
$watermark_width_real = $watermark_height_real / $watermark_height * $watermark_width;
}
// помещаем водяной знак на изображение (здесь задаётся расположение ватермарка на картинке)
$dest_x = (($size[0]) / 2) - (($watermark_width_real) / 2);
$dest_y = (($size[1]) * 0.873) - (($watermark_height_real) / 2);
imagealphablending($image, true);
imagealphablending($watermark, true);
imageSaveAlpha($image, true);
// создаём новое изображение (использована функция поддерживающая масштабирование ватермарка вместо обычной imagecopy)
imagecopyresampled($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width_real, $watermark_height_real, $watermark_width, $watermark_height);
$imageformat = 'image'.$format;
if ($format = 'png') {
$imageformat($image, $filename);
} else {
$imageformat($image, $filename, 100);
}
// освобождаем память
imagedestroy($image);
imagedestroy($watermark);
return true;
}