IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[GD] Transparence et dégradé


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 21
    Points : 21
    Points
    21
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    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...
    De retour parmis vous après 10 ans!!

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 21
    Points : 21
    Points
    21
    Par défaut
    Merci pour ta réponse.
    Malheureusement j'ai toujours le même problème.

    Le nouveau script étant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    imagealphablending($destination, FALSE);
    imagesavealpha ($destination , true);
    Elle ne se fait même plus

    Je ne comprends pas...

  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    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!
    De retour parmis vous après 10 ans!!

  5. #5
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    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.
    De retour parmis vous après 10 ans!!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 21
    Points : 21
    Points
    21
    Par défaut
    Nikel, je m'en suis sorti avec le script sur le masque de transparence
    MERCI BEAUCOUP !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PPT-2010] Transparence en dégradé
    Par zakake dans le forum Powerpoint
    Réponses: 3
    Dernier message: 10/10/2013, 00h03
  2. TLabel masqué ou pas transparent après dégradé
    Par zemeilleurofgreg dans le forum Composants VCL
    Réponses: 6
    Dernier message: 02/01/2012, 21h08
  3. dégradé transparent sur une image
    Par Dionyzos dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/04/2005, 15h47
  4. Transparence dans un dégradé
    Par WriteLN dans le forum Flash
    Réponses: 2
    Dernier message: 27/10/2003, 16h42
  5. Dégradé de transparence
    Par DestinyWar45 dans le forum DirectX
    Réponses: 2
    Dernier message: 26/05/2003, 01h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo