electronika

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.

mcgyverclipes.jpg

Résultat avec la limite à 20:

nb_full_20.jpg

Limite à 40:

nb_full_40.jpg

Limite à 80:

Les traits du visage apparaissent

nb_full_80.jpg

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.

nb_full_120.jpg

Limite à 150:

Le logo en bas à gauche devient lui visible ainsi que le texte qu’il contient.

nb_full_150.jpg

Limite à 180:

nb_full_180.jpg

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.

juin 22nd, 2008 Posted by admin | Programmation web - php | one comment

Un commentaire »

  1. […] 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

Laisser un commentaire

*
Pour prouver que vous n'êtes pas un bot, recopiez le code ci-dessous

Attention, l'anti-spam est impitoyable, pensez à faire un copier de votre message!


Anti-Spam Image