Php => GD, png et suppression de couleur

Ambigua -  
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'utilise un script php pour traiter une image chargée avec un formulaire.

Dans le cas d'un jpg, je voudrait supprimer le blanc du fond, pour ne garder que les "autres couleurs".. et sauver tout ca en png ( pour la transparence)

Donc, j'ai fait :

$image_jpg = $dest.'image.jpg';

//GD image

$image = imagecreatefromjpeg($image_jpg);

imagetruecolortopalette($image, false, 255);

$fond = imagecolorclosestalpha($image, 255, 255, 255, 0);

imagecolortransparent($image, $fond);

imagepng($image, $dest."signature.png",0);

imagedestroy($image);

Ca m'enleve une partie du fond blanc.. mais ca laisse un vilain pourtour blanc autour des blocs qui ont de la couleur ..

Avec Imagick, j'avais réusii a faire mieux en local, mais cette classe ne fonctionne pas sur les mutualisés d'OVH ( et mon script doit marcher sur plusieurs hébergements .. )

Comment améliorer ce script pour qu'il supprime TOUT ce qui est blanc ou quasi blanc ??et ce avec GD ...

Merci

Florent

A voir également:

1 réponse

Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Le problème vient de la compression jpeg, qui « bave » sur les contours. Du coup, autour des zones du premier plan, le fond n'est pas tout-à-fait blanc, et il n'est donc pas remplacé par du transparent.

Je ne vois pas de solution immédiate à ton problème.

Ceci dit, tu devrais pouvoir parcourir les pixels de ton image, et remplacer ceux qui sont « presque blancs » par du blanc ; par exemple, en disant que la composante R + la composante V + la composante B doit être supérieure à un seuil que tu détermines, disons 750 (car 255 x 3 = 765)...
Et après seulement, tu appliques la transparence.

Par contre, je l'avoue, c'est un peu du bricolage, et ça peut rendre transparentes des zones qui sont juste très claires...

Xavier
0