2011-09-07 1 views
3

J'essaie d'ajouter un filigrane à toutes les images dans un répertoire, disons www.example.com/private. Certaines de ces images ont des résolutions massives, tandis que d'autres sont relativement normales. Pour le moment, mon filigrane fonctionne correctement pour les petites images. Même en centrant le filigrane, je laisse toujours des sections souhaitables des plus grandes images vulnérables au recadrage.Comment puis-je répéter un filigrane sur une image demandée en utilisant PHP?

Donc, ma question est de savoir comment j'écrirais un script php pour répéter le filigrane dans l'image, à la fois verticalement et horizontalement? Je ne sais pas vraiment sur le développement back-end, sauf que je sais qu'il est nécessaire de fournir une protection de tatouage adéquate, donc j'ai regardé autour de google et ne pouvait trouver que http://www.regardadesign.co.uk/blog/post/php-image-manipulation/15, ce qui ne fonctionne pas.

Jusqu'à présent, je l'ai placé le fichier .htaccess suivant dans le répertoire/privé:

<IfModule mod_rewrite.c> 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule \.(gif|jpeg|jpg|png)$ /admin/watermark.php [QSA,NC] 
</ifModule>" 

Et c'est le script dans le fichier watermark.php:

<?php 
ini_set('memory_limit','200M'); 
$path = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']; 
$image = imagecreatefromstring(file_get_contents($path)); 
$w = imagesx($image); 
$h = imagesy($image); 
$watermark = imagecreatefrompng('watermark.png'); 
$ww = imagesx($watermark); 
$wh = imagesy($watermark); 
imagecopy($image, $watermark, (($w/2)-($ww/2)), (($h/2)-($wh/2)), 0, 0, $ww, $wh); 
header('Content-type: image/jpeg'); 
imagejpeg($image); 
imagedestroy($image); 
imagedestroy($watermark); 
exit(); 
?> 

Répondre

4

Cela se produit parce que vous insérez le filigrane une seule fois. Si vous répétez le filigrane le long de la zone d'image, cela fera l'affaire.

Remplacez votre ligne imagecopy pour cela:

$img_paste_x = 0; 
while($img_paste_x < $w){ 
    $img_paste_y = 0; 
    while($img_paste_y < $h){ 
     imagecopy($image, $watermark, $img_paste_x, $img_paste_y, 0, 0, $ww, $wh); 
     $img_paste_y += $wh; 
    } 
    $img_paste_x += $ww; 
} 
+0

Je coudn't tester ce code en ce moment, mais je l'espère, cela fonctionne. – v42

+0

Non, malheureusement cela n'a pas fonctionné, il reste seulement une copie du filigrane au centre et c'est juste un solide rectangle noir au lieu de mon image en filigrane. – Ben

+0

Oh, les paramètres étaient faux. Je pense que je l'ai réparé. – v42

Questions connexes