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

Langage PHP Discussion :

imagecolorallocatealpha() aide à l'utilistation


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Points : 193
    Points
    193
    Par défaut imagecolorallocatealpha() aide à l'utilistation
    Bonjour à tous,

    Je fais un script pour réaliser un reflet d'une image "wet floor".

    Alors voila pour commencer est ce que la fonction imagecolorallocatealpha() est bien celle qui me faut pour la transparence ?

    Ensuite si c'est bien la bonne fonction, le plus gros de mon problème est que mon script ne fait pas la transparence.

    Avant de vous montrer mon script je vais vous donner quelques informations
    sur celui-ci.

    En plus de tenter un effet "wet floor" il resize l'image et fonctionne avec la methode Get comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <img src="lescript.php?...lesarguments..." />
    Alors voila les étapes: le script repère l'extension est cré une imagegd en fonction avec "imagecreatefrom...".
    Ensuite il recupère le width et le height avec "getimagesize".
    Puis il cré une image de destination avec imagetruecolor pour finir en assemblant l'image source et l'image de destination avec "ImageCopyResampled".

    La c'était l'étape du resize.

    Ensuite le script va renverser l'image en symétrie avec une boucle et "imagecopy".

    donc je cré une autre image avec imagetruecolor qui sera l'image de destination de la symétrie.

    Et je fais ma boucle pour copier ligne de pixel par ligne de pixel.

    Jusque la tout va bien.

    Et à partir de la quand je souhaite appliquer la fonction imagecoloraloocatealpha() je perds mes symétries et j'obtiens une image grise bizar qui n'est pas vraiment transparente.

    voila mon script (la partie qui nous interresse) attention ce script resize correctement les images carrées et horizontales:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    if(isset($_GET['src'])AND isset($_GET['width'])AND isset($_GET['height'])AND isset($_GET['type']) 
    AND $_GET['src'] != NULL AND $_GET['width'] != NULL AND $_GET['height'] != NULL AND $_GET['type'] != NULL)
    	{
    	$src = $_GET['src'];
    	$width = $_GET['width'];
    	$height = $_GET['height'];
    	$type = $_GET['type'];
     
    	$extension = substr($src, -3);
    	$extend = strtolower($extension);
    $heightMaximal = $height; 
     
    			$widthMaximal = round(($heightMaximal / $heightSource) * $widthSource);
    			$imgDestination = ImageCreateTrueColor($widthMaximal, $heightMaximal);
     
    			ImageCopyResampled($imgDestination,$imgSource,0,0,0,0,$widthMaximal,$heightMaximal,$widthSource,$heightSource);
     
     
    			$width = imagesx($imgDestination);
    			$height = imagesy($imgDestination);
     
    			$dest = imagecreatetruecolor($width, $height);
     
    			imagealphablending($dest, false);
    			imagesavealpha($dest, true);
     
    			switch($type)
    				{
    				case 'v':
    				for($i=0;$i<$height;$i++)
    					{
    					imagecopy($dest, $imgDestination, 0, ($height - $i - 1), 0, $i, $width, 1);
    					}
    				break;
     
    				case 'h':
    				for($i=0;$i<$width;$i++)
    					{
    					imagecopy($dest, $imgDestination, ($width - $i - 1), 0, $i, 0, 1, $height);
    					}
    				break;
     
    				default : 
    				return $img; 
    				break;
    			}
     
    			imagefilledrectangle($dest, 0, 0, $width, $height, imagecolorallocatealpha($dest, 127, 127, 127, 50));
     
    			header('Content-Type: image/png'); 
     
    			imagepng($dest);
    			ImageDestroy($dest);
    			ImageDestroy($imgDestination);
    			ImageDestroy($imgSource);
    }
    Voila merci à tous j'espère vraiment que quelqu'un pourra m'aider.

    ah oui et aussi l'appel depuis le html.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="lecript.php?src=lechemin/limage.jpg&width=la largeur du resize&height=la hauteur du resize&type=v pour une symétrie verticale" />
    Merci d'avance et bon week end à tous.

  2. #2
    Membre habitué Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Points : 193
    Points
    193
    Par défaut
    Bon bah j'ai résolu le problème tout seul,

    Il faut en fait utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    imagelayereffect($imgDestination, IMG_EFFECT_OVERLAY);
    qui permet de rendre les pixels de fond transparent, pour ceux que ça interesse et il faut paramatrer toutes les images créées avec gd avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    imagealphablending($dest, false);
    imagesavealpha($dest, true);
    et ça pour l'image source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    imagesavealpha($imgSource, true);
    A plus

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

Discussions similaires

  1. Aide en ligne
    Par étoile dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 14h00
  2. Ajouter une aide
    Par Mailgifson dans le forum C++Builder
    Réponses: 5
    Dernier message: 12/06/2002, 13h32
  3. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05
  4. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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