50 votes

Ajouter un filigrane aux images avec php

J'ai un site web où les utilisateurs peuvent télécharger des images...

Je dois ajouter mon logo (filigrane) aux images une fois qu'elles sont téléchargées.

Comment puis-je le faire ?

Il est important que le filigrane soit placé dans un coin où il sera visible. Par exemple, j'ai vu des sites Web qui génèrent un filigrane à la volée et le placent là où l'arrière-plan de l'image principale est "de la même couleur", de sorte que le filigrane ressort, si vous voyez ce que je veux dire.

Quelqu'un a-t-il un bon tutoriel ou un article à ce sujet ? Ou connaît-il une fonction en php dont j'aurais besoin pour trouver la position du filigrane ?

58voto

XUE Can Points 293

A bon exemple dans le manuel 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);

22voto

iraqi_love4ever Points 543

Utiliser cette fonction
le type d'image du filigrane doit être "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');

12voto

Sailee Shahir Points 61

Bon exemple d'image de filigrane et positionnée au centre

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

3voto

Alberto Points 106

J'ai trouvé une bien meilleure solution qui consiste à ajouter un filigrane de façon dynamique par le biais de .htaccess, vous pouvez trouver le tutoriel ici :

Ajouter un filigrane aux images via htaccess

Après avoir téléchargé le fichier .htaccess personnalisé, le scryptage de watermark.php et votre image watermark.png, toutes les images du dossier et de ses sous-dossiers afficheront le filigrane, mais vous conserverez le fichier original sur le serveur.

J'espère que cela aidera quelqu'un comme je l'ai fait pour moi.

2voto

Jimmy Cuadra Points 13499

Cela peut être fait à l'aide d'une bibliothèque de manipulation d'images telle que GD o ImageMagick . Voici un tutoriel qui explique une façon de le faire en utilisant GD :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X