Publié le 06/06/2011
Auteur James
Réseaux sociaux
0 partages
0 tweets
0 plus
2 commentaires

Lire et modifier la couleur d'un pixel

L'extension GD, disponible depuis PHP 4.3, dispose de nombreuses fonctions de manipulation d'image. Dans cet exemple, nous allons voir la lecture et la modification d'un pixel sur une image JPEG.

Modifier une image Jpeg

La class PHP JPEGImageColor regroupe les fonctions dont nous allons avoir besoin:
- ouvrir/fermer une image,
- lire la couleur d'un pixel,
- modifier la valeur d'un pixel.
<?php
/**
 * Lire et modifier un pixel d'une image JPEG
 * auteur James 06/06/2011
 * publié sur www.fobec.com
 */
class JPEGImageColor {
 
    private $img;
 
    /*
     * Charger une nouvelle image JPEG
     */
    public function load($filename) {
        $this->img=imagecreatefromjpeg($filename);
    }
 
    /*
     * Enregistrer l'image au format JPEG
     */
    public function save($filename) {
        imagejpeg($this->img,$filename,90);
    }
 
    /*
     * Libérer l'image
     */
    public function close() {
        imagedestroy($this->img);
    }
 
    /*
     * Lire la couleur d'un pixel
     */
    public function pixelAt($x,$y) {
        //Retourner l'index de la couleur sous forme d'un entier
        $ix = imagecolorat($this->img, $x, $y);
        //Décomposer l'index de la couleur en RGB
        return imagecolorsforindex($this->img, $ix);
    }
 
    /*
     * Fixer la couleur d'un pixel
     */
    public function setPixel($x,$y,$R, $G, $B) {
        //Retourner l'index de la couleur RGB 
        $col = imagecolorresolve($this->img, $R, $G, $B);
        imagesetpixel($this->img, $x, $y, $col);
    }
}
?>

Lire un pixel d'une image

Pour déterminer la couleur d'un point, l'opération consiste à ouvrir l'image, lire la couleur d'un pixel puis convertir la couleur en RGB. Avec la class PHP JPEGImageColor, il suffit de saisir les fonctions suivantes:
<?php
//créer une instance de la class
$jpegImageColor=new JPEGImageColor();
//ouvrir une image JPEG
$jpegImageColor->load('aupif.jpg');
//lire la couleur du pixel
$RGB=$jpegImageColor->pixelAt(10, 10);
//libérer l'image
$jpegImageColor->close();
 
print_r($RGB);
?>
Par exemple, la couleur $RGB est egale à
Array ( [red] => 255 [green] => 255 [blue] => 255 [alpha] => 0 )

Modifier la couleur d'un pixel

Pour illustrer le changement d'une couleur, nous allons remplacer les pixels blanc en rouge dans une image. La méthode consiste à parcourir les pixels de l'image et rechercher les pixels ayant une valeur RGB(255,255,255). Dès que la couleur est trouvée, le pixel est remplacé par du rouge RGB(255,0,0).
<?php
//créer une instance de la class
$jpegImageColor=new JPEGImageColor();
//ouvrir une image JPEG
$jpegImageColor->load('image.jpg');
//boucle sur la largeur
for ($x=0;$x<50;$x++  ) {
    //boucle sur la hauteur
    for ($y=0;$y<50;$y++  ) {
        $rgb= $jpegImageColor->pixelAt($x,$y);   
        //si le pixel est blanc alors la couleur est remplacer par du rouge
        if ($rgb['red']==255 &&$rgb['green']==255 && $rgb['blue']==255)
            $jpegImageColor->setPixel($x, $y, 255,0,0);
    }
}
//enregistrer les modifications
$jpegImageColor->save('image.jpg');
//libérer l'image
$jpegImageColor->close();
?>

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar Etiazam

Publié par Etiazam

le 27/09/2016 à 21:39:04

Si je peux me permettre, il manque l'incrementation dans les deux boucles, telles qu'elles sont presentees elles font tourner le navigateur en rond, il faut donc ajouter
for ($x=0;$x<50;$x++) {

avatar Fobec

Publié par Fobec

le 28/09/2016 à 08:29:37

Le code PHP sur les boucles a ete corrige dans l'article.
Merci Etiazam !

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - class
Mise a jour
06/06/2011
Visualisation
vu 5456 fois
Public
Internaute
Auteur de la publication
James
Membre junior
Auteur de 6 articles
|BIO_PSEUDO|
Commentaires récents

Publié par piranhas dans java

bonjour, je veux te signaler que la piece jointe est fausse car il n\'y pas de liaison entre le modele et la vue, toutes le information passe par le controlleur.

Publié par brayan dans logiciel

je vous retour modem ip pour configury net firwell

Publié par FOBEC dans CMS

Un chronomètre, des challenges et l'affichage des meilleurs scores sont prévus. Si ça vous intéresse, laissez moi un p'tit mot !!!

Publié par Lathois dans CMS

super impec <br>ca marche du feu de ZEUS<br>depuis le temps que je cherchais ca<br>j ai enfin trouve<br><br>merci Athois

Publié par Fobec dans php5

En effet, Twitter a modifie la structure de son API. P'etre qu'un jour, on trouve le temps pour finaliser un wrapper pour la version 1.1