Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

Lire et éditer un fichier BMP avec PHP

Article posté le 11-02-2021 dans la catégorie PHP

Article mis à jour le : 05-05-2022

Une petite librairie vous permettant de lire, parcourir et éditer un fichier BMP avec PHP

Je n'ai pas trouvé de solution facile permettant de lire et de parcourir un fichier BMP avec PHP. Dans le cadre d'un projet personnel, j'ai eu à faire ce type d'opération. Aussi, pour compléter ce manque j'ai développé une petite lib qui fait le travail.

Commençons par l'installation, classique :

composer require ecourtial/php-bmp-parser

Enfin, nous pouvons ouvrir le fichier. Dans l'exemple ci-dessous, je consulte les valeurs RGB et hexadécimale du pixel se trouvant aux coordonnées x = 2, y = 0.

$service = new BmpService();
$image = $service->getImage('myBmpFile.bmp');
echo $image->getPixel(2, 0)->getR();
echo $image->getPixel(2, 0)->getG();
echo $image->getPixel(2, 0)->getB();
echo $image->getPixel(2, 0)->getHex();

Ceci est donc fait avec une librairie compatible PHP 7.4 et 8.0, installable via composer et ne nécessitant pas de librairie tierce.

Néanmoins, vous pouvez aussi éditer le fichier que vous avez ouvert, avec certaines limitations. Vous aurez besoin cette fois d'avoir l'extension gd d'installée. Voici un exemple de modification :

// Je souhaite modifier le fichier ouvert plus haut mais garder l'original. Je change donc le chemin de sortie.
$image->setPath('myNewBmpFile.bmp);
// Changeons la couleur de ce pixel
$image->getPixel(0, 1)->setR(0)->setG(0)->setB(126);
// Agrandissons l'image. Les pixels ajoutés sont de couleur blanche.
$image->setDimensions(3, 4);
// Pour certains de ces nouveaux pixels, définissions une autre couleur.
$image->getPixel(0, 3)->setR(200)->setG(0)->setB(200);
$image->getPixel(1, 3)->setR(0)->setG(0)->setB(255);
// Enregistrons.
$image = $service->update($image);

Et c'est tout. Très basique, mais efficace. Le code source se trouve ici


Cet article vous a plu? Découvrez d'autres articles :


comments powered by Disqus