Watermark images et protection contre la copie

Une des choses qu’un webmaster a horreur est de voir son travail recopier par un tiers sur son blog ou site.
Très souvent pour se protéger de cela, le webmaster « watermark » ses images (tatouage numérique). Ceci constiste à mettre un logo ou un message (souvent l’adresse du site) sur ses images pour que lorsqu’on recopie la page, les images prises soient marquées.
Cela dissuade en général.

Pour watermarker ses images, on peux le faire image par image (ou via un script). Une fois que c’est fait l’image est watermarker à vie (éventuellement on peux modifier si c’est en calque, mais on doit le refaire image par image).
L’autre solution consiste à utiliser un script sur le serveur WEB qui va watermarker à la volée les images, cela bouffe un peu de ressources mais le gros avantage est qu’on peux retirer à tout moment le watermark ou changer l’image de fond très simplement.

Le principe est simple, on s’appuye sur du rewrite pour dire au serveur d’utiliser un script (ici ce sera PHP) pour réécrier chaque image.
Le serveur WEB en question doit donc supporter le rewrite.

Voici le script PHP que j’utilise, il a été récupéré sur un site tiers, il y a quelque temps, le lien ne semble plus fonctionnel, j’ai supprime une partie qui ne marchait plus sur PHP5 :

<?php

#####################################################
# originally gleaned from
# http://www.fedeblog.com.ar/files/view.php?i=Watermark/watermark.php
# Modified by Liem Bahneman (liem@bahneman.com) with some 
# path enhancements when called to handled subdirectories

#####################################################
# Okay to edit these

# what is the root of your files?
$basedir="/répertoire contenant l'image du watermark";
$watermarkimage="image.png";

#####################################################
# end user modifiable stuff...

$file=basename($_GET['i']);
$path=($_GET['p']);

$image = $basedir."/".$path."/".$file;
$watermark = $basedir."/".$watermarkimage;

$im = imagecreatefrompng($watermark);
imagealphablending($im, true);
imagesavealpha($im, true);

$ext = substr($image, -3);

if (strtolower($ext) == "gif") {
    if (!$im2 = imagecreatefromgif($image)) {
        echo "Error opening $image!"; exit;
    }
} else if(strtolower($ext) == "jpg") {
    if (!$im2 = imagecreatefromjpeg($image)) {
        echo "Error opening $image!"; exit;
    }
} else if(strtolower($ext) == "png") {
    if (!$im2 = imagecreatefrompng($image)) {
        echo "Error opening $image!"; exit;
    }
} else {
    die;
}

imagecopy($im2, $im, (imagesx($im2)/2)-(imagesx($im)/2), (imagesy($im2)/2)-(imagesy($im)/2), 0, 0, imagesx($im), imagesy($im));

$last_modified = gmdate('D, d M Y H:i:s T', filemtime ($image));

header("Last-Modified: $last_modified");
header("Content-Type: image/jpeg");
imagejpeg($im2,NULL,80);
imagedestroy($im);
imagedestroy($im2);

Vous devez paramétrer ses deux variables, la première est le répertoire où se trouve l’image à watermark, la seconde est le nom de l’image :

# what is the root of your files?
$basedir="/répertoire contenant l'image du watermark";
$watermarkimage="image.png";

Le script s’appuye sur imagecopy de PHP qui se trouve dans le package php5-gd Une fois que le script est en place, il suffit de créer un fichier .htaccess à la racine du site ou dans le répertoire des images avec les instructions du rewrite, par exemple :

RewriteEngine On
RewriteRule ^(.*)/(.*\.(png|PNG)$) /wm.php?p=$1&i=$2
/wm.php est le chemin du script watermark ici /wm.php
Si tout va bien au prochain chargement des images, vous devriez voir vos images avec votre Watermark.

Parfois cela ne dissuade pas la recopie d’un tutorial, comme le montre la capture ci-dessus où le tutorial USBFix a été recopié avec les images watermarkées

watermark images

On peux alors s’amuser à jouer avec des règles rewrite pour modifier les images et les faire pointer vers d’autres via le referer.
En effet, lorsque la page recopiée du tutoriel est consultée, des requêtes vers votre site WEB sont effectuées par le navigateur WEB de l’internaute afin en autre de télécharger les images.
Sur ses requêtes, le referer est celui du site qui a recopié l’image.
On peux donc créer une règle rewrite qui dit que pour ce referer, on redirige vers une page en particulier, comme par exemple :

RewriteEngine On
 RewriteCond %{HTTP_REFERER} ^http://www\.dzsat\.org [NC]
 ReWriteRule /* http://www.malekal.com/pokemon.png [R,L]
Ce qui donne :

watermark images

Cela peut être très interressant si sur la page du tutoriel recopiée, les dimensions des images ne sont pas fixées, car rien ne vous empêche alors de faire pointer vers une page gigantesque, ce qui défigurera complètement le tutoriel (c’est aussi assez marrant dans le cas de l’utilisation d’un avatar).

Pour trouver les pages WEB recopiées, vous pouvez utiliser cette commande qui liste les referer depuis les logs Apache (il faut qu’il soit activé) et trouver des referer inhabituels : tail -20000 /var/logs/apache2/access.log|awk ‘{print $11}’|tr -d « \ » »|grep http|sort -n|uniq

 

Comment lire d'autres tutoriels de malekal.com ?

Si le site vous a aidé, svp, débloquez les bloqueurs de publicités, n'hésitez pas non plus à partager l'article ou le site sur les réseaux sociaux.

Pour pouvoir lire plus d'articles et tutoriels, utilisez le menu en haut du site. Plein d'articles et tutos utiles vous attendent !

Besoin d'aide ?

Posez votre question ou soumettez votre problème sur le forum malekal.com pour obtenir une aide efficace : Aller sur le forum malekal.com
(Visited 72 times, 1 visits today)

6 thoughts on “Watermark images et protection contre la copie

  1. N’existe t’il pas un moyen de le faire pour toutes les images recopiées, plutôt que site-qui-copie1, site-qui-copie2 … ?

  2. @danommoc : j’ai pas compris ?!
    Le .htaccess watermark toutes les images des sous-répertoires.

    @ELK Fayçal : merci!

  3. En fait, vous avez modifié le « calque » uniquement pour le site htxp://www.dzsat.org et je me demandais s’il était possible pour le faire pour tout les sites utilisant ces images autres que malekal.com (site où est hébergé l’image)

  4. Non c’est pas possible.
    Les images sur le tutoriel sont possibles, car elles sont chargés sur http://www.malekal.com
    donc il ya une requête sur le serveur qui est faite, comme je suis l’administrateur, je peux faire ce que je veux sur ces requête.
    Ici en l’occurence, il y a une réé-écritre de la requete vers l’image pour rediriger vers une autre image.
    Les autres images qui sont sur d’autres serveurs sur les autres pages de http://www.dzsat.org, je ne peux pas les maitriser puisqu’elles ne vont pas vers http://www.malekal.com

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *