Подтвердить что ты не робот

Добавьте "Watermark" к изображениям с помощью php

У меня есть сайт, на котором пользователи могут загружать изображения...

Мне нужно добавить свой логотип (водяной знак) к изображениям после их загрузки.

Как я могу это сделать?

И важно, чтобы водяной знак находился в углу, где он будет виден, например, я видел веб-сайты, которые генерируют водяной знак "на лету", и помещает метку везде, где фон основного изображения "одного цвета" "поэтому водяной знак торчит, если вы знаете, что я имею в виду.

У кого-нибудь есть хороший учебник или статья об этом? Или знаете какую-либо функцию в php, которая мне нужна, чтобы найти положение водяного знака?

4b9b3361

Ответ 1

A хороший пример в руководстве по PHP:

// Load the stamp and the photo to apply the watermark to
$stamp = imagecreatefrompng('stamp.png');
$im = imagecreatefromjpeg('photo.jpeg');

// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

// Copy the stamp image onto our photo using the margin offsets and the photo 
// width to calculate positioning of the stamp. 
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

// Output and free memory
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);

Ответ 2

Хороший пример изображения водяного знака и расположенного в центре

<?php
// Load the stamp and the photo to apply the watermark to
$stamp = imagecreatefrompng('stampimg.png');
$im = imagecreatefrompng('mainimage.png');

// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

$imgx = imagesx($im);
$imgy = imagesy($im);
$centerX=round($imgx/2);
$centerY=round($imgy/2);

// Copy the stamp image onto our photo using the margin offsets and the photo 
// width to calculate positioning of the stamp. 
imagecopy($im, $stamp, $centerX, $centerY, 0, 0, imagesx($stamp), imagesy($stamp));

// Output and free memory
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>

Ответ 3

используйте эту функцию
тип водяного знака должен быть "png"

 function watermark_image($target, $wtrmrk_file, $newcopy) {
    $watermark = imagecreatefrompng($wtrmrk_file);
    imagealphablending($watermark, false);
    imagesavealpha($watermark, true);
    $img = imagecreatefromjpeg($target);
    $img_w = imagesx($img);
    $img_h = imagesy($img);
    $wtrmrk_w = imagesx($watermark);
    $wtrmrk_h = imagesy($watermark);
    $dst_x = ($img_w / 2) - ($wtrmrk_w / 2); // For centering the watermark on any image
    $dst_y = ($img_h / 2) - ($wtrmrk_h / 2); // For centering the watermark on any image
    imagecopy($img, $watermark, $dst_x, $dst_y, 0, 0, $wtrmrk_w, $wtrmrk_h);
    imagejpeg($img, $newcopy, 100);
    imagedestroy($img);
    imagedestroy($watermark);
}

watermark_image('image_name.jpg','watermark.png', 'new_image_name.jpg');

Ответ 4

Я нашел гораздо лучшее решение, которое добавляет водяной знак динамически через .htaccess, вы можете найти учебник здесь:

Добавить водяной знак для изображений через htaccess

После загрузки пользовательского файла .htaccess, водяного знака watermark.php и вашего изображения watermark.png, все изображения в папке и ее подпапках будут отображать водяной знак, однако вы все равно сохраните исходный файл на сервере.

Надеюсь, что помогает кому-то так же, как и мне.

Ответ 6

ImageMagick работает хорошо для этого. Я делал это раньше. Тем не менее, весь бизнес - это немного боль. Особенно, если вы хотите использовать режимы смешивания и т.д.

Ответ 7

// Load the stamp and the photo to apply the watermark to

$stamp = imagecreatefrompng('stamp.png');
$im = imagecreatefromjpeg('photo.jpg');
$save_watermark_photo_address = 'watermark_photo.jpg';

// Set the margins for the stamp and get the height/width of the stamp image

$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

// Copy the stamp image onto our photo using the margin offsets and the photo 
// width to calculate positioning of the stamp. 

imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

// Output and free memory
// header('Content-type: image/png');

imagejpeg($im, $save_watermark_photo_address, 80); 
imagedestroy($im);