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

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

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

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

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

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

Хороший пример в руководстве по 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); 

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

 <?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); ?> 

использовать эту функцию
тип водяного знака должен быть «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'); 

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

Добавление водяных знаков к изображениям через htaccess

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

Надежда, которая помогает кому-то, что она мне помогла.

Это можно сделать с помощью библиотеки обработки изображений, такой как GD или ImageMagick . Вот учебник, в котором объясняется способ сделать это с помощью GD:

http://articles.sitepoint.com/article/watermark-images-php

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

 // 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);