Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > GD
GD Forum d'entraide pour l'extension GD permettant de manipuler des images en PHP. Avant de poster -> tutoriels GD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/04/2008, 12h10   #1
Invité de passage
 
Inscription : août 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 14
Points : 2
Points : 2
Par défaut [GD] Transparence et dégradé

Bonjour à tous,

je cherche à faire l'algo suivant en php :
- on extrait un morceau d'une image
- on en fait un dégradé du haut vers le bas en augmentant la transparence

C'est à dire que l'image est complètement visible en haut, puis disparait progressivement quand on descend...
Le fond de l'image étant transparent (on créé un png).

Voici mon script :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
<?php
 
// La source correspond à l'image dont on va extraire un morceau
 
$source = imagecreatefromjpeg("toto.jpg"); //on ouvre l'image source
 
// Dimension de l'image que l'on va extraire
$hauteur=20;
$largeur=500; 
 
header("Content-type: image/png"); //on envoie les infos au navigateur
 
 //on créé une image truecolor de largeurxhauteur pixels
$destination = imagecreatetruecolor($largeur,$hauteur);
 
imagecolorallocate($destination, 0,0,0); 
 
imagecolortransparent($destination, $transparent_color);
 
// On extrait et on fait le dégradé : plusieurs lignes horizontales
// Que l'on extrait puis qu'on rassemble, en les rendant de plus en plus transparentes
 
for ($cpt=0; $cpt<$hauteur; $cpt++)
	imagecopymerge($destination,$source, 0, $cpt, 0,$cpt, $largeur, 1,100-$cpt*round(100/$hauteur));
 
imagepng($destination);
imagedestroy($destination, $source);
?>
Le dégradé se fait bien.

Seulement je n'arrive pas à rendre le fond transparent. Celui-ci reste noir et du coup ça fait un dégradé image vers noir.

Est-ce que quelqu'un pourrai me donner un petit coup de pouce

Merci beaucoup.
franckarts est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2008, 03h03   #2
Expert Confirmé
 
Avatar de Sub0
 
Homme
Inscription : décembre 2002
Messages : 3 468
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39

Informations forums :
Inscription : décembre 2002
Messages : 3 468
Points : 3 115
Points : 3 115
Envoyer un message via MSN à Sub0 Envoyer un message via Skype™ à Sub0
Voir les fonctions imagesavealpha et imagealphablending. Il faut GD2, sinon c'est difficile.

Note: Avec IE6, il faut appliquer un filtre MS pour obtenir la transparence...
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2008, 15h01   #3
Invité de passage
 
Inscription : août 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 14
Points : 2
Points : 2
Merci pour ta réponse.
Malheureusement j'ai toujours le même problème.

Le nouveau script étant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
<?php
 
$source = imagecreatefromjpeg("toto.jpg"); //on ouvre l'image source
 
$hauteur=20;
$largeur=500; 
 
header("Content-type: image/png"); //on envoie les infos au navigateur
 
 //on créé une image truecolor de largeurxhauteur pixels
 
$destination = imagecreatetruecolor($largeur,$hauteur);
 
$transparent_color=imagecolorallocate($destination, 0,0,0);
imagecolortransparent($destination, $transparent_color);
 
 
imagealphablending($destination, FALSE);
imagesavealpha ($destination , true);
 
 
// On fait le dégradé
 
for ($cpt=0; $cpt<$hauteur; $cpt++)
	imagecopymerge($destination,$source, 0, $cpt, 0,$cpt, $largeur, 1,100-$cpt*round(100/$hauteur));
 
imagepng($destination);
imagedestroy($destination, $source);
?>

Avant, la transparence se faisait bien quand je commentais le degradé.
Depuis l'ajout des lignes
Code :
1
2
3
 
imagealphablending($destination, FALSE);
imagesavealpha ($destination , true);
Elle ne se fait même plus

Je ne comprends pas...
franckarts est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2008, 16h11   #4
Expert Confirmé
 
Avatar de Sub0
 
Homme
Inscription : décembre 2002
Messages : 3 468
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39

Informations forums :
Inscription : décembre 2002
Messages : 3 468
Points : 3 115
Points : 3 115
Envoyer un message via MSN à Sub0 Envoyer un message via Skype™ à Sub0
Lis attentivement les explications qui sont données avec les fonctions.

Tu as aussi des exemples d'utilisation dans ces pages.

Je pense que tu peux arriver à trouver tout seul car ce n'est pas très compliqué en fait.

Courage!
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2008, 16h26   #5
Expert Confirmé
 
Avatar de Sub0
 
Homme
Inscription : décembre 2002
Messages : 3 468
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39

Informations forums :
Inscription : décembre 2002
Messages : 3 468
Points : 3 115
Points : 3 115
Envoyer un message via MSN à Sub0 Envoyer un message via Skype™ à Sub0
Allé, je vais essayer de t'aider un peu plus.
Si mes souvenirs sont bons, il faut aussi dessiner le fond transparent avec imagefilledrectangle et utiliser imagecolorallocatealpha pour spécifier la couleur transparente.
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2008, 17h23   #6
Invité de passage
 
Inscription : août 2006
Messages : 14
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 14
Points : 2
Points : 2
Nikel, je m'en suis sorti avec le script sur le masque de transparence
MERCI BEAUCOUP !!!
franckarts est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h42.


 
 
 
 
Partenaires

Hébergement Web