signature sur image

sigma2008

WRInaute impliqué
Bonsoir,

J'enregistre des images sur le serveur grace à php mais (imagejpeg) je souhaite maintenant ajouter une signature à l'image avant d'enregistrer (text en bas de l'image un peu transparent). Possible ?

Merci
 

spout

WRInaute accro
watermark.php
PHP:
<span class="syntaxhtml"><br /><span class="syntaxdefault"><?php<br />$watermarkimage</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"watermark.png"</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxcomment">//$file = basename($_GET['i']);<br /><br /></span><span class="syntaxdefault">$scriptDir </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> dirname</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'SCRIPT_FILENAME'</span><span class="syntaxkeyword">]);<br /><br /></span><span class="syntaxdefault">$image </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $scriptDir</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$_GET</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'i'</span><span class="syntaxkeyword">];<br /></span><span class="syntaxdefault">$watermark </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $scriptDir</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$watermarkimage</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxdefault">$im </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> imagecreatefrompng</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$watermark</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">$ext </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$image</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">-</span><span class="syntaxdefault">3</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">strtolower</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$ext</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> </span><span class="syntaxstring">'gif'</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(!</span><span class="syntaxdefault">$im2 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> imagecreatefromgif</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$image</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    echo </span><span class="syntaxstring">"Error opening $image!"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> exit</span><span class="syntaxkeyword">;<br />}<br />}</span><span class="syntaxdefault"> else if</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">strtolower</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$ext</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> </span><span class="syntaxstring">'jpg'</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(!</span><span class="syntaxdefault">$im2 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> imagecreatefromjpeg</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$image</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    echo </span><span class="syntaxstring">"Error opening $image!"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> exit</span><span class="syntaxkeyword">;<br />}<br />}</span><span class="syntaxdefault"> else if</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">strtolower</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$ext</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> </span><span class="syntaxstring">'png'</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(!</span><span class="syntaxdefault">$im2 </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> imagecreatefrompng</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$image</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    echo </span><span class="syntaxstring">"Error opening $image!"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> exit</span><span class="syntaxkeyword">;<br />}<br />}</span><span class="syntaxdefault"> else </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    die</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'Error'</span><span class="syntaxkeyword">);<br />}<br /></span><span class="syntaxdefault">imagefilledrectangle</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im2</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0 </span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">imagesy</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im2</span><span class="syntaxkeyword">))-(</span><span class="syntaxdefault">imagesy</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> imagesx</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im2</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> imagesy</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im2</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> imagecolorallocatealpha</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im2</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 100</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">imagecopy</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im2</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $im</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">imagesx</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im2</span><span class="syntaxkeyword">)-(</span><span class="syntaxdefault">imagesx</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im</span><span class="syntaxkeyword">))),</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">imagesy</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im2</span><span class="syntaxkeyword">))-(</span><span class="syntaxdefault">imagesy</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im</span><span class="syntaxkeyword">)),</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> imagesx</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im</span><span class="syntaxkeyword">),</span><span class="syntaxdefault"> imagesy</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im</span><span class="syntaxkeyword">));<br /><br /></span><span class="syntaxdefault">$last_modified </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> gmdate</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'D, d M Y H:i:s T'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> filemtime </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$image</span><span class="syntaxkeyword">));<br /><br /></span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Last-Modified: $last_modified"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Content-Type: image/jpeg"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">imagejpeg</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im2</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">NULL</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">95</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">imagedestroy</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">imagedestroy</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$im2</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">?><br /></span></span>

.htaccess
Code:
RewriteEngine on
RewriteRule ^(.*\.[jJ].*)$ watermark.php?i=$1

Sinon:
http://phpimageworkshop.com/tutorial/1/adding-watermark.html
http://www.phpjabbers.com/put-watermark-on-images-using-php-php20.html
http://www.sitepoint.com/watermarking-images/
...
 

Leonick

WRInaute accro
en fait, le problème que j'ai avec les watermarks automatiques, c'est que je n'ai pas réussi à trouver comment gérer la couleur/transparence en fonction de la photo : si on a une photo de sable sur la plage, un watermark trop clair ne passera pas, mais un trop sombre tranchera trop. Et réciproquement si on a un fond sombre (genre sous-bois)
 

Ajan

WRInaute discret
Leonick a dit:
en fait, le problème que j'ai avec les watermarks automatiques, c'est que je n'ai pas réussi à trouver comment gérer la couleur/transparence en fonction de la photo :

Une méthode qui donne des résultats corrects dans la plupart des cas (si la luminosité de la zone où tu places le watermark est relativement homogène):

Tu crées un watermark blanc et un noir (sur fond transparent).
Tu détermines le rectangle de la photo sur lequel le watermark va s'appliquer et tu le copies dans une autre image.
Sur cette image tu appliques le filtre grayscale : imagefilter($image, IMG_FILTER_GRAYSCALE)
Les 3 composantes de couleur de chaque pixel ont alors la même valeur comprise entre 0 et 255.
Tu moyennes ces valeurs pour tous le pixels du rectangle.
Si la moyenne est inférieure ou égale à 128 sur applique le watermark blanc
Si la moyenne est superieure à 128 sur applique le watermark noir

Après si tu as peur que cela tranche trop dans certains cas, tu peux créer d'autres watermarks intermédiaire et jouer sur plus de plages de sélections...
 

Leonick

WRInaute accro
ça me parait pas mal comme méthode. Dès que j'ai un peu de temps je testerais.
en fait, au début je mettais le watermark pour ne pas qu'on copie mes images, alors qu'ensuite c'était, justement, pour qu'on puisse partager mes images mais que ça puisse faire de l'auto promo pour mes sites, grâce au watermark
 

Ajan

WRInaute discret
Moi c'est essentiellement pour la deuxième raison. Comme on ne peut pas vraiment éviter de se faire copier les images en hot link, autant que cela fasse de la promo.

Pour un watermark 'antivol', qui couvre généralement une grande partie de l'image en semi-transparence, la méthode que j'ai donnée ne marche pas trop (la moyenne de luminosité n'est pas significative). Mais pour un petit watermark dans un coin, cela donne un résultat en général acceptable.
 

Discussions similaires

Haut