Наложение водяных знаков на фотографии средствами PHP
Сегодня рассмотрим наложение водяного знака на фото средствами PHP. Для многих это важно. Многие размещают редкие и важные коммерческие фотографии, наложение "шильдика" один из методов борьбы с воровством фото. Если каждую фотографию обрабатывать на Photoshop - это трата времени. На PHP же можно легко накладывать водяной знак на любые изображения.
Для этого возьмём два изображения. Первое jpeg - обычное фото, на которую наложим шильдик, назовём его photo.jpg
, а "водяной знак" фото без фона в формате png
назовём - logo.png
Это лого рисовал для одного сайта, буду использовать его, так как просто первая попалась под руку.
И берём случайную фотографию в Яндекс.Картинках
Данное фото взято с сайта nnm.me.
Перейдём к самому коду.
Первое что нам надо сделать это создать изображение в форматах png и jpeg соответственно и записать их в переменные $stamp
и $im
.
//водяной знак
$stamp = imagecreatefrompng('logo.png');
//сама фотография
$im = imagecreatefromjpeg('photo.jpg');
Получаем ширину(x) и высоту(y) знака и фотографии.
//данные для знака
$sx = imagesx($stamp);
$sx = imagesy($stamp);
//данные для фото
$ix = imagesx($im);
$iy = imagesy($im);
Наложим знак на фото:
imagecopy($im, $stamp, $ix/4, $iy/4, 0, 0, $sx, $sx);
Разберём функцию:
imagecopy
- функция, служащая для копирования частей изображения.
$im
- Изображение на которое накладывается водяной знак.
$stamp
- Изображение которое накладывается.
$ix/4
и $iy/4
- координаты, по которым будет располагаться "водяной знак".
0
и 0
- координаты, начиная с которых будет копирован "водяной знак".
$sx
и $sy
- ширина и высота, накладываемого изображения.
Сохраним новое фото в формате png
imagepng($im,'new.png');
и у меня получилось данное фото.
Так просто можно автоматизировать защиту фото от "воровства".
Код целиком
$stamp = imagecreatefrompng('/home/katya/projects/modules/photos/logo.png');
$im = imagecreatefromjpeg('/home/katya/projects/modules/photos/photo.jpg');
$sx = imagesx($stamp);
$sy = imagesy($stamp);
$ix = imagesx($im);
$iy = imagesy($im);
imagecopy($im, $stamp, $ix/4, $iy/4, 0, 0, $sx, $sy);
imagepng($im,'new.png');
Посмотреть на pastebin.
Данный пост подготовлен автором @zheev.