Conversion en noir et blanc d’une image en php
Voici une fonction qui permet de convertir une image en noir et blanc . Attention, le format jpg ne permet pas un noir et blanc complet (voir en bas de page)
La fonction utilise 1 argument pour fixer le seuil de luminance qui détermine si le pixel sera blanc ou noir.
Le scripte:
function img_full_nb($file,$file_out,$limite){ if (file_exists($file)){ $image = imagecreatefromjpeg($file); $x_dimension = imagesx($image); $y_dimension = imagesy($image); $new_image = imagecreatetruecolor($x_dimension, $y_dimension);// for ($x = 1; $x <= $x_dimension; $x++) { for ($y = 1; $y <= $y_dimension; $y++) { $lum=pix_luminence($x,$y,$image); $color = imagecolorallocate($new_image,$lum,$lum,$lum); if(pix_luminence($x,$y,$image) < $limite){ $color = imagecolorallocate($new_image,0,0,0); imagesetpixel($new_image, $x, $y, $color); }else{ $color = imagecolorallocate($new_image,255,255,255); imagesetpixel($new_image, $x, $y, $color); } } } imagejpeg($new_image, $file_out); return true; }else{ return false; } } function pix_luminence($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; }
Image originale qui possède déjà un effet poster.
Résultat avec la limite à 20:
Limite à 40:
Limite à 80:
Les traits du visage apparaissent
Limite à 120:
On obtiendra pas mieux pour le texte, dés lors il sera possible de réaliser une reconnaissance de caractère sur cette image noir et blanc.
Limite à 150:
Le logo en bas à gauche devient lui visible ainsi que le texte qu’il contient.
Limite à 180:
Jpeg et pertes de données
Vous vous êtes peu être rendu compte que ces images ne sont pas véritablement en noir et blanc. En effet l’image de sortie a été crée avec la fonction imagejpeg() qui génère une jpg. Le format jpg à adoucit l’image en ajoutant des pixels de couleurs intermédiaire au noir et au blanc.
A partir de maintenant le format png sera utilisé car celui ci ne provoque pas de perte.
Nos images seront belle est bien composé uniquement de pixel noir et blanc.
Pour cela il suffit de modifier
imagejpeg($new_image, $file_out);
par
imagpng($new_image, $file_out);
Version de la librairie GD
Suivant la version de votre librairie il existe des fonctions dédié à ce type de conversion en noir et blanc.







[…] Image couleur vers noir et blanc en php Conversion en noir et blanc d’une image en php […]
Pingback par » Histogramme d’une image en php | 4 janvier 2009