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.
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 imagePour 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 pixelPour 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();
?>