je suis en cours de programmation d'une appli de retouche d'images pour webmasters. En attendant de la finir, je vous laisse quelques petits bouts de code très utiles.
la fonction etape1() renvoie une image true color et fait une copie de sauvegarde pour un éventuel "undo" de l'utilisateur.
la fonction etape2() se charge d'envoyer l'image au navigateur ou dans un fichier.
Je ne détaille pas plus ces 2 fonctions, à vous de voir suivant votre besoin.
Symétrie axe vertical
$img=etape1();
list($x,$y)=getimagesize( "chemin de l'image" );
$img2=imagecreatetruecolor($x,$y);
for ($h=0; $h<$y; $h++)
imagecopy ($img2, $img, 0, $y-$h, 0, $h, $x, 1);
etape2($img2);
Symétrie axe horizontal
$img=etape1();
list($x,$y)=getimagesize( "chemin de l'image" );
$img2=imagecreatetruecolor($x,$y);
for ($l=0; $l<$x; $l++)
imagecopy ($img2, $img, $x-$l, 0, $l, 0, 1, $y);
etape2($img2);
Teinte sépia style vielle photo. Petite astuce sur ce code:
Le travaill des pixels s'effectue en couleurs indexées avec bruit de tramage. Celà induit une légère pixellisation, pour contrer celà et ressortir une image en couleurs vraies, je quadruple la surface de l'image de travaill avec resample et même chose à l'envers à l'issue.
$img=etape1();
$img2=$img;
list($x,$y)=getimagesize( "chemin de l'image" );
$img=imagecreatetruecolor($x*2,$y*2);
imagecopyresampled($img, $img2, 0, 0, 0, 0, $x*2, $y*2, $x, $y);
imagetruecolortopalette($img, true, 256); // passage en mode palette
for( $i=0; $i<imagecolorstotal( $img ); $i++ ) { // listing des couleurs
$c = ImageColorsForIndex( $img, $i );
$t = ($c["red"]+$c["green"]+$c["blue"])/3;
imagecolorset( $img, $i, $t, $t/1.15, $t/1.6 ); // recolorisation de la palette
}
imagegammacorrect ($img, 1.0, 1.1 ); // correction gamma pour parfaire l effet
imagecopyresampled($img2, $img, 0, 0, 0, 0, $x, $y, $x*2, $y*2);
$img=$img2;
etape2($img);
Tracé des contours pour PHP5 et GD2 et supérieur
$img=etape1();
imagefilter($img,IMG_FILTER_EMBOSS); // tracé des contours
imagefilter($img,IMG_FILTER_CONTRAST, -50); // modif de contraste
imagefilter($img,IMG_FILTER_GRAYSCALE); // passage en niveaux de gris
imagegammacorrect ($img, 1.5, 0.5 ); // assombrir les noveaux moyens
etape2($img);
si ca interesse du monde, j'en ai écrit pleins d'autres dont le fameux "contraste, luminosité, gamma automatique" tant indispensable. Demandez les moi...
Petite astuce en plus:
lors du travail avec des images dynamiques en PHP, utilisez le script comme image avec les headers que vous connaissez surement. Vous pouvez lui passer les chaines de requettes directement avec du javascript et des boutons ou menus.
Mais attention aux header v1 et V1.1 pour le no-cache, ils ne fonctionnent pas sur tout les navigateurs.
Donc utilisez une chaine de requette aléatoire pour faire comprendre au navigateur que l'image est différente. Cette chaine fonctionne le mieux quand elle est envoyée 500ms après la première requette d'affichage de l'image:
exemple de code pour l'image dans un calque:
<div id="fond" style="text-align: center">
<img id="image" src="script.php" alt=".." />
</div>
le script javascript pour la requettevar act = "votre requette pour l'action à effectuer, ex: rotation";
setTimeout("afficher_image(" + act + ")", 500);
funtion afficher_image (act) {
document.getElementById('fond').innerHTML = '<img id="image" src="script.php?rand=' + Math.random () + '&act=' + ac t+ '" alt="Image dynamique" />';
}