Histogramme d’une image en php
La plupart des logiciels de retouches d’images disposent de fonctions permettant d’obtenir un histogramme d’une image suivant la luminance ou suivant les couleurs RVB.
Dans cet page nous réalisons l’histogramme de la luminance d’une image. La luminance prend une valeur différente pour chaque pixel de l’image suivant la couleur de celui-ci. La luminance est calculé avec une formule bien précise (Début de page).
Image de départ:
Traitement en php
function histogramme($file){
$key = 0;
$tab = array();
$x_dimension = 0;
$y_dimension = 0;
$image = 0;
$x = 0;
$y = 0;
//initialise le tableau (au cas ou il est des trous pour certaines valeurs)
$tab=array_fill(0, 255, ‘0′);
$image = imagecreatefromjpeg($file);
$x_dimension = imagesx($image);
$y_dimension = imagesy($image);
for ($x = 0; $x < $x_dimension; $x++) {
for ($y = 0; $y < $y_dimension; $y++) {
$key = pix_luminance($x,$y,$image);
$tab[$key]++;
}
}
// trie le tableau par ordre croissant des valeurs cles (Pas forcément nécessaire)
ksort($tab);
return $tab;
}
Détail de la fonction:
La fonction va parcourir tout les pixels de l’image puis pour chacun de ces pixels elle va compter le nombre de pixels avec la même luminance. Il ne peut y a voir que 256 valeurs. Le tableau contient donc 256 clés avec pour chacunes une valeur correspondant aux nombres de pixels trouvés. Afin d’éviter que l’histogramme soit déformé à cause de l’absence de pixel avec certaines valeurs de luminance on initialise chaque valeurs du tableau à 0.
La fonction retourne ensuite ce même tableau.
Pour déterminer la luminance de chaque pixels on utilise la fonction suivante:
//******************************************
// Retourne la luminance d’un pixel
//******************************************
function pix_luminance($x,$y,$image){
$luminance_running_sum=0;
$rgb = imagecolorat($image, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$luminance_running_sum = (0.30 * $r) + (0.59 * $g) + (0.11 * $b);
return $luminance_running_sum;
}
L’affichage du résultat s’effectue en utilisant la librairie spécialisé.
On passe le tableau à une autre page qui à pour rôle de réaliser le graphique sous forme d’ image.
On affiche l’image dans la page en cour comme ceci:
<img src=’histogramme_graph.php?data=”.serialize($tab).”‘>
Le tableau est sérialisé afin qu’il puisse être transmis à une autre page par la méthode GET, en clair tout passe directement dans la barre d’url.
De l’autre coté la variable $data est déserialisé afin de récupérer le tableau. Puis l’affichage se fait simplement avec la librairie artichow en appelant la classe suivant ../lib/artichow/LinePlot.class.php. (Voir les nombreux exemples sur le site artichow)
Résultat:
Les graphs sont obtenus comme toujours avec la librairie php artichow.
Pour vous convaincre du résultat voici ce qu’obtient le logiciel photoshop:
Les fichiers
Pour reproduire tout ceci il vous faut télécharger la librairie artichow et la placer sur votre serveur puis les 2 fichiers suivant:
histogramme.php qui contient les fonctions, c’est le fichier que vous devrez exécuter pour apercevoir l’histogramme.
Et le fichier histogramme_graph.php qui génère l’histogramme.
Vous devrez probablement modifier le chemin de la librairie artichow dans le fichier histogramme.php
Enfin voici l’exemple ici de se que vous devriez obtenir:
Il arrive!
Les fichiers sources:
En rapport avec le traitement d’images en php:
Image couleur vers noir et blanc en php
Conversion en noir et blanc d’une image en php
Un code plus poussé d’un histogramme multi-courbes en php qui n’utilise pas la librairie artichow:
http://www.paris-beyrouth.org/Afficher-l-histogramme-d-une-image
D’autres exemples de traitements sur le même site en php:
http://www.paris-beyrouth.org/Modifier-les-courbes-d-une-image
http://www.paris-beyrouth.org/Un-site-avec-un-grain
http://www.paris-beyrouth.org/De-saturer-une-image-en-passant-en
http://www.paris-beyrouth.org/Creer-automatiquement-une
http://www.paris-beyrouth.org/Un-filtre-de-dispersion-graphique
http://www.paris-beyrouth.org/Etendre-la-couche-alphahttp://www.paris-beyrouth.org/Corriger-les-niveaux-des-images


