mardi 26 janvier 2010

ant / php : convertir une image niveau de gris --> couleur


Description


Pour ceux qui font des maquettes peintes, certains supports sont affichés en niveaux de gris alors que ce serait bien de voir les images en couleur.
Voici décrit comment transformer une image noir et blanc en couleurs en utilisant ant et php.


Procédure



  • Récupérer une image en N/B dont les "couleurs" sont bien distinctes et unies pour une même "couleur".

  • Enregistrer l'image dans un format utilisable en php ( gif ).

  • Trouver la localisation (x,y) de chaque couleur sur l'image.

  • S'assurer de trouver une couleur (r,v,b) "correcte" pour chaque transcription et remplir un fihier php de ces couleurs.

  • Passer la moulinette php pour transcrire les niveaux de gris en couleurs.

  • Afficher l'image après traitement.





Exemple de code ant pour générer un fichier des couleurs connues



Exemple de code ant pour formater les codes couleurs



<replaceregexp
file="${out.fic}"
flags="gm"
match="BGCOLOR=${quote}#(..)(..)(..)${quote}${sup}${inf}/TD${sup}${inf}TD${sup}${inf}B${sup}${inf}P STYLE=${quote}margin-left:10${quote}${sup}RLM${inf}/P${sup}${inf}/B${sup}${inf}P STYLE=${quote}margin-left:10${quote}${sup}(.*?)${inf}/P${sup}${inf}/TD${sup}"
replace="${crlf}###$RLM\4 = imagecolorallocate( $dst_im , 0x\1 , 0x\2 , 0x\3 ) ;
###${crlf}"
byline="false"
/>


Extrait de code php généré



$RLM65 = imagecolorallocate( $dst_im , 0xB7 , 0xC6 , 0xCD ) ;
$RLM66 = imagecolorallocate( $dst_im , 0x2F , 0x33 , 0x35 ) ;
$RLM67 = imagecolorallocate( $dst_im , 0xF1 , 0xE9 , 0xD2 ) ;
$RLM68 = imagecolorallocate( $dst_im , 0x6C , 0x74 , 0x54 ) ;
$RLM69 = imagecolorallocate( $dst_im , 0x59 , 0x5C , 0x4E ) ;
$RLM70 = imagecolorallocate( $dst_im , 0x28 , 0x2C , 0x25 ) ;



Exemple de code php pour traiter les images en niveaux de gris



Extrait de code php pour traiter chaque pixel de l'image



function colorier( $image , $x_ini , $y_ini , $couleur_out )
{
$x_max = imageSX($image);
$y_max = imageSY($image);
$couleur_in = imagecolorat($image, $x_ini , $y_ini );
for ( $xx = 0 ; $xx < $x_max ; $xx++ ) for ( $yy = 0 ; $yy < $y_max ; $yy++ ) { if ( $couleur_in == imagecolorat($image, $xx , $yy ) ) { imagesetpixel($image, $xx,$yy, $couleur_out) ; } } }


Extrait de code php pour traiter chaque couleur



colorier( $dst_im , 80 , 90 , $fond ) ;
colorier( $dst_im , 1180 , 690 , $RLM70 ) ;
colorier( $dst_im , 1227 , 690 , $RLM75 ) ;
colorier( $dst_im , 1263 , 690 , $RLM76 ) ;


Extrait de code php pour rotationner les images et les sauver



$rotation = imagerotate($dst_im, 360-90 , $fond);
imagegif($rotation);
imagegif($rotation , $o );
imagedestroy($rotation);
imagedestroy($dst_im);
imagedestroy($img_src);



images avant / après
















Bonnes pratiques



  • utiliser des propriétés ( des constantes ) pour la réutilisabilité du code.

  • faire attention aux quelques formats d'images nativement gérés par php ( java traite les bmp en plus par exemple ).




Plus d'informations sur



  • la tâche replaceregexp ici.

  • Ant ici.




Aucun commentaire:

Enregistrer un commentaire