Projet Webmaster PHP

Portail Php


Ecrire dans une image à la volée


Cet article présente une fonction de re-création d'image jpg ou png, avec possibilité d'insertion d'un texte et également masquage de l'url de l'image.
Cette fonction a le double avantage à la fois d'ajouter un texte sans pour autant modifier l'image d'origine et de protéger le hotlink, lien direct depuis un autre site vers une ressource image hébergée sur votre site web. Voyons ces deux fonctions et le script adéquat.


Ecrire dans une image


Pour ajouter par exemple un texte de copyright sur une image, il était auparavant nécessaire d'utiliser un logiciel de retouche d'image. Avec cette fonction écrite en php, l'image d'origine n'est pas dégradée, l'image affichée contient pourtant le texte ajouté, et ce également en cas de sauvegarde de l'image par l'internaute. Ce n'est pas une simple superposition de texte.


Protéger une image


Autre apport de cette fonction, masquer l'url de la ressource ainsi que son extension.
Comme nous allons le voir, étant donné que c'est la fonction qui affiche l'image, l'image a comme url cette fonction via un script php. Il n'est plus alors possible à l'internaute de disposer du chemin d'accès de l'image, le lien direct depuis un site web externe vers cette ressource n'est alors possible que via l'appel du script. C'est ainsi une ressource interne (le script de la fonction) qui permet d'accéder à la ressource image et d'en gérer les éventuelles autorisations.


Voyons ce script.



header("Content-type: image/png");
$string= $_GET['string'];
$name= $_GET['name'];
$im = imagecreatefrompng($name.".png");
$grey = imagecolorallocate($im, 128, 128, 128);
$px = (imagesx($im) - 7.5 * strlen($string)) / 3;
$len = imagesy($im) - 15;
imagestring($im, 2, 5, $len, $string, $grey);
imagepng($im);


La même fonction peut-être reécrite pour une image en jpeg
avec un entête image/jpeg
la création d'image via imagecreatefromjpeg
l'affichage sur la navigateur grâce à imagejpeg


Du côté de la syntaxe de la fonction appelante il y a deux possibilités
Soit une image avec comme url l'appel de la fonction

image


Soit un div avec un style backg-image


Dans les deux cas, c'est le même script qui est appelé, c'est ce script qui devient donc l'url de l'image.