Понадобилось наложить водяной знак на изображение, нашел в интернете такой код:
<?php
function can_upload($file){
// если имя пустое, значит файл не выбран
if($file['name'] == '')
return 'Вы не выбрали файл.';
/* если размер файла 0, значит его не пропустили настройки
сервера из-за того, что он слишком большой */
if($file['size'] == 0)
return 'Файл слишком большой.';
// разбиваем имя файла по точке и получаем массив
$getMime = explode('.', $file['name']);
// нас интересует последний элемент массива - расширение
$mime = strtolower(end($getMime));
// объявим массив допустимых расширений
$types = array('jpg', 'png', 'gif', 'bmp', 'jpeg');
// если расширение не входит в список допустимых - return
if(!in_array($mime, $types))
return 'Недопустимый тип файла.';
return true;
}
function make_upload($file){
// получаем полезные данные о картинке и водяном знаке
$image_info = getimagesize($file['tmp_name']);
$watermark_info = getimagesize('watermark.png');
// определяем MIME-тип изображения, для выбора соответствующей функции
$format = strtolower(substr($image_info['mime'],
strpos($image_info['mime'], '/') + 1));
// определяем названия функция для создания и сохранения картинки
$im_cr_func = "imagecreatefrom" . $format;
$im_save_func = "image" . $format;
// загружаем изображение в php
$img = $im_cr_func($file['tmp_name']);
// загружаем в php наш водяной знак
$watermark = imagecreatefrompng('watermark.png');
// определяем координаты левого верхнего угла водяного знака
$pos_x = ($image_info[0] - $watermark_info[0]);
$pos_y = ($image_info[1] - $watermark_info[1]);
// помещаем водяной знак на изображение
imagecopy($img, $watermark, $pos_x, $pos_y, 0, 0, $watermark_info[0],
$watermark_info[1]);
$getMime = explode('.', $file['name']);
// нас интересует последний элемент массива - расширение
$mime = strtolower(end($getMime));
$name = time().".".$mime;
$im_save_func($img, 'img/' . $name);
echo $im_save_func;
}
<?php
include_once('functions.php')
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Загрузка изображений на сервер</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input name="MAX_FILE_SIZE" value="10485760">
<input type="file" name="file">
<input type="submit" value="Загрузить файл!">
</form>
<?php
// если была произведена отправка формы
if(isset($_FILES['file'])) {
// проверяем, можно ли загружать изображение
$check = can_upload($_FILES['file']);
if($check === true){
// загружаем изображение на сервер
make_upload($_FILES['file']);
echo "<strong>Файл успешно загружен!</strong>";
}
else{
// выводим сообщение об ошибке
echo "<strong>$check</strong>";
}
echo $im_save_func;
}
?>
</body>
</html>
Но проблема в том, что он накладывает водяной знак, когда загружаешь изображение на сервер, а что делать, если картинка уже лежит на сервере? Ознакомление с кодом показало, что во время работы многие данные код берет из $_FILE
, когда картинка приходит на сервер. Поскольку изображение лежит уже на сервере, то ничего этого нет. Можете подсказать, как подредактировать код, чтобы он добавлял водяные знаки на уже загруженные изображения? Названия файлов, которые нужно отредактировать, я заранее знаю.
За работу с изображением отвечает функция make_upload($file), где в качестве $file всегда передается $_FILE['file']. Сама функция использует только поля $file['tmp_name'] (как путь к файлу-источнику) и $file['name'] (как путь к результирующему файлу).
Вы можете ничего не менять и просто вызывать функцию таким образом:
$cfg = array(
'tmp_name' => 'images/input.png', // Путь к исходному изображению
'file' => 'images/output.png' // Путь, по которому будет сохранено изображение с водным знаком
);
make_upload($cfg);
Но я бы много чего сменил в коде примера, который вы нашли, он написан не лучшим образом для использования в реальных условиях.
Виртуальный выделенный сервер (VDS) становится отличным выбором
С одного домена/сервера на другой идет ajax запрос, выходит ошибка No 'Access-Control-Allow-Origin' header is present on the requested resourceВ
Здравствуйте! Нужно найти зависимость в наборе чисел, при генерации использовался генератор случайных чисел, какой именно не знаюСгенерировано...
На данный вопрос уже ответили:
Здравствуйте, есть строка (она может меняться), в ней нужно найти подстроку, например XYZ, вопрос заключаетсяв том что XYZ может меняться, в том...