Jump to content
Sign in to follow this  
petit-ourson

Fonction GD et transparence

Rate this topic

Recommended Posts

Si quelqu'un a un peu utiliser les fonctions GD sous PHP ...

J'essaie de creer une image transparente mais ... Impossible de réussir à gérer cette transparence ;o)

$vImage = imagecreatetruecolor( 100 , 100);
imagesavealpha( $vImage, true );
$bg = imagecolorallocatealpha($vImage, 255, 255, 255, 60);
imagefilledrectangle ($vImage, 0, 0, 100, 100, $bg);
$vTextColor = imagecolorallocate( $vImage, 0, 0, 0 );
imagestring ( $vImage, 10, 0 , 9, "aaaaa", $vTextColor );

header("Content-type: image/png");
Imagepng($vImage);

En modifiant le dernier paramètre de imagecolorallocatealpha() avec les valeurs de 0 a 127, il passe du blanc au noir mais c'est pas trop cela que je cherche. Il devrait passer du blanc au transparent.

Merci d'avance

Edited by petit-ourson

Share this post


Link to post
Share on other sites

Le problème que tu poses ne vient pas de la lib. GD, mais de IExplorer, qui gère mal (pas du tout, je crois) la transparence des .png.

Essaies de voir avec un autre navigateur, ou changes d'extension.

Share this post


Link to post
Share on other sites

Je suis sous Firefox et l'image ne s'affiche pas bien non plus dans un éditeur d'image.

Cela fonctionne bien si je part d'une ressource produite par un createimagefrompng() mais pas si je pars d'une ressource imagecreatetruecolor().

Share this post


Link to post
Share on other sites

Tient j'etais passé à côté de cette fonction. Je verifierai demain au boulot ;o)

Merci je vous tiens au courant.

Share this post


Link to post
Share on other sites

[HS]

Le problème que tu poses ne vient pas de la lib. GD, mais de IExplorer, qui gère mal (pas du tout, je crois) la transparence des .png.

Il les gère juste mal. Il sait gérer une transparence binaire sur les PNG (comme si c'était un gif transparent, en fait) mais foire sur les canaux alpha qui permettent une transparence sur 254 niveaux.

[/HS]

Share this post


Link to post
Share on other sites
[HS]

Il les gère juste mal. Il sait gérer une transparence binaire sur les PNG (comme si c'était un gif transparent, en fait) mais foire sur les canaux alpha qui permettent une transparence sur 254 niveaux.

[/HS]

<{POST_SNAPBACK}>

T'es sur de ton coup ? Je savais que c'etait le cas sous IE, mais je croiyais que le support PNG sous FF etait complet ?

Share this post


Link to post
Share on other sites

En l'occurence, c'est bien de IE que l'on parle ;)

Share this post


Link to post
Share on other sites

Je reprends le fil de cette discussion intéressante.

Effectivement si on passe imagealphablending à false, on peut gérer les transparences correctement.

Par exemple pour obtenir un fond transparent dans une image (imagefill ne fonctionne pas avec des couleurs transparentes utilisant des alpha, en tout cas pas sous PHP 5.0, il semble que sur la dernière version cela est corrigé) :

//$img est une ressource créé à partir de imagecreatetruecolor par ex.
imagealphablending($img,false);
$black = imagecolorallocate($img,0,0,0);
imagefill($img,0,0,$black);
imagecolortransparent($img,$black);
//continuer avec imagettftext(...) pour écrire un texte

Si vous ne mettez pas la ligne imagealphablending false vous aurez aussi un fond transparent mais le bord de l'écriture sera mixé avec du noir (bien moche).

Attention aprés vous ne pouvez plus utiliser la couleur noire pure (0,0,0), vous pouvez utiliser à la place (0,0,1).

Si ça intéresse quelqu'un, je suis sur le point de terminer une classe basée sur la librairie GD 2 qui permet d'écrire et éditer du texte sur fond transparent, disponible dans quelques jours sur http://christophe.helson.free.fr

Share this post


Link to post
Share on other sites

Tu destines cette classe à une utilisation particulière, ou c'est juste 'comme ca' ?

Parce qu'à l'époque où tout le monde veut mettre un maximum de contenu texte sur la page, il peut paraitre surprenant de vouloir écrire du texte 'en image', non ?

C'est vrai qu'au niveau de la reproduction de la page, ca peut poser des problèmes, et donc régler .. le problème du copyright dudit texte. Mais celui-ci ne sera pas indexé, ce qui n'est pas forcément mieux...

(quoiqu'une utilisation sympa peut être l'utilisation en balise 'antispam' pour les adresses email :D )

D'où ma question..

(et préviens nous lorsque c'est ok ;) )

Share this post


Link to post
Share on other sites

Le point de départ est uniquement de progresser en développement objet php5. Comme j'aime l'aspect imagerie, j'ai choisi de creuser les possibilités de la librairie GD. Aprés en lisant les commentaires du manuel php, j'ai vu que ça pouvait correspondre à un manque dans le domaine.

Effectivement ce n'est pas du tout adapté à un point de vue rédactionnel, puisque non référençable. Je le verrais plutôt pratique d'un point de vue graphisme.

Je vous tiens au courant.

Share this post


Link to post
Share on other sites

La classe textImg permet de transformer un texte en image PNG avec un fond transparent. Elle utilise la librairie GD version 2. Les caractéristiques principales sont :

* le choix de la police, la taille, l'angle d'écriture et la couleur du texte,

* le calcul optimisé des dimensions de l'image en fonction de la longueur du texte,

* la création d'un arrière plan transparent dans l'image,

* le positionnement dans une image de fond existante pour fusionner les deux.

Je vous invite à la tester si vous êtes intéressés par le graphisme sous PHP. Toutes vos remarques seront les bienvenues ;)

Il y a également sur le site une page d'application qui vous laissera assouvir vos instincts de taggeurs enfouis en vous depuis votre adolescence :fou:

Enjoy,

http://christophe.helson.free.fr/textimg.php5

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...