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