Quelques fonctions utiles Images dynamiques

Dux
Eléphant du PHP | 127 Messages

26 sept. 2005, 07:11

Bonjour,
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 requette
var 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" />';

}

Eléphant du PHP | 161 Messages

26 sept. 2005, 13:55

Bien sympa ces petites fonctions, perso je suis preneur ;)

Dux
Eléphant du PHP | 127 Messages

05 oct. 2005, 01:30

Voici une capture de ABCphoto en cours de finalisation, c'est la phase la plus longue :)

screenshot ABCphoto pris dans FireFox 1.5

2eme screenshot ABCphoto pris dans FireFox 1.5

Eléphanteau du PHP | 42 Messages

09 janv. 2006, 15:07

Salut,

Très bonne idée que de proposer cela.
A tout hasard, aurais tu une fonction permettant de rajouter un "copyright" sur une image, à la facon d'un calque sous PhotShop?

Merci par avance

Eléphant du PHP | 441 Messages

09 janv. 2006, 15:20

petit tuto (pdf) qui te permettra de faire tout seul comme un grand :wink:
Futures Stars par ici >> www.apel-doorn.com
fan d'info et du ... PSG !! :D
Apprendre, comprendre et maîtriser telle est ma devise!
Fan inconditionnel de netvibes

Eléphanteau du PHP | 42 Messages

09 janv. 2006, 20:55

petit tuto (pdf) qui te permettra de faire tout seul comme un grand :wink:
Oh que ca me plait bien ;)