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 :

librarie GD imagecopymerge 256 couleurs


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 493
    Points : 295
    Points
    295
    Par défaut librarie GD imagecopymerge 256 couleurs
    Bonjour,

    J'ai un script ou l'utilisateur upload une image.
    Je traite celle ci dans le script ci-dessous (simplifié pour plus de clarté) et le l'appose sur une autre avec imagecopymerge.
    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
    58
     
    // Ouverture image wanted
    $wanted = imagecreatefrompng("wanted.png");
    imagealphablending($wanted, true);
    imagesavealpha($wanted, true);
     
    $details_image_user = getimagesize($_SESSION['image_user']); //on récupère les infos de l'image uploadée
     
    $details_image_user_redimentionnee = getimagesize('temp/'.$_SESSION['nom_image_user']); //on récupère les infos de l'image redimentionnée    
     
     
    // Ouverture image uploadée
    switch ($details_image_user['mime']) {
     
        case 'image/jpeg':
            $image_user = imagecreatefromjpeg($_SESSION['image_user']);
        break;
     
        case 'image/gif':
            $image_user = imagecreatefromgif($_SESSION['image_user']);
        break;
     
        case 'image/png':
            $image_user = imagecreatefrompng($_SESSION['image_user']);
            imagealphablending($image_user, true);
            imagesavealpha($image_user, true);
        break;
     
        default:
            return false;
        break;    
    }
     
    // On appose l'image uploadée au Wanted
    $largeur_wanted = 950;
    $hauteur_wanted = 1311;
     
    $centrage_x = ($largeur_wanted - $details_image_user_redimentionnee[0]) / 2;
    $centrage_y = ($hauteur_wanted - $details_image_user_redimentionnee[1]) / 2 - 10;
     
    imagecopymerge($wanted,$image_user, $centrage_x, $centrage_y, 0, 0, $details_image_user_redimentionnee[0],$details_image_user_redimentionnee[1],80); //on copie l'image
     
    imagepng($wanted,'temp/img_'.$_SESSION['time_image_user'].'.png');
     
    // Un peu de ménage
    imagedestroy($wanted);
    imagedestroy($image_user);
    @unlink('temp/TN_'.$_SESSION['nom_image_user']);
    @unlink('temp/'.$_SESSION['nom_image_user']);
     
     
    // Supprime tous les fichier de plus d'un jour
    $folder = new DirectoryIterator('temp/');
    foreach($folder as $file) {
        if($file->isFile() && !$file->isDot() && (time() - $file->getMTime() > 86400)) {
            unlink($file->getPathname());
        }
    }
    Mon problème est le suivant : Sur le résultat final, l'image uploadée n'a que 256 couleurs.

    Original

    Résultat


    Merci d'avance de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    je pense que la première chose à faire d'urgence est de passer chez le coiffeur.

    Et comme ça ?
    Code php : 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
    $details_image_user = getimagesize($_SESSION['image_user']); //on récupère les infos de l'image uploadée
    $details_image_user_redimentionnee = getimagesize('temp/'.$_SESSION['nom_image_user']); //on récupère les infos de l'image redimentionnée    
    // Ouverture image uploadée
    switch ($details_image_user['mime']) {
        case 'image/jpeg':
            $image_user = imagecreatefromjpeg($_SESSION['image_user']);
    		break;
        case 'image/gif':
            $image_user = imagecreatefromgif($_SESSION['image_user']);
    		break;
        case 'image/png':
            $image_user = imagecreatefrompng($_SESSION['image_user']);
            imagealphablending($image_user, true);
            imagesavealpha($image_user, true);
    		break;
        default:
            return false;
    }
     
    // dimensions voulues
    $largeur_wanted = 950;
    $hauteur_wanted = 1311;
    // CREATION image wanted
    $wanted = imagecreatetruecolor($largeur_wanted, $hauteur_wanted);
    imagealphablending($wanted, true);
    imagesavealpha($wanted, true);
    // centrage
    $centrage_x = ($largeur_wanted - $details_image_user_redimentionnee[0]) / 2;
    $centrage_y = ($hauteur_wanted - $details_image_user_redimentionnee[1]) / 2 - 10;
    // on copie l'image sur wanted
    imagecopymerge($wanted,$image_user, $centrage_x, $centrage_y, 0, 0, $details_image_user_redimentionnee[0],$details_image_user_redimentionnee[1],80);
    // nom de l'image
    imagepng($wanted,'temp/img_'.$_SESSION['time_image_user'].'.png');
    Dernière modification par Celira ; 20/12/2013 à 10h19.

  3. #3
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 493
    Points : 295
    Points
    295
    Par défaut
    Merci pour ton aide.

    Bien sur, ce que tu proposes fonctionne mais que fais tu de mon image de départ --> wanted.png ?????

    Pour que cela soit bien clair :

    wanted.png



    Image uploadée par l'utilisateur




    Résultat final



    Pour la coupe de cheveux je vais en parler à Franck Zappa

  4. #4
    Invité
    Invité(e)
    Par défaut
    On la colle dessu avant :
    Code php : 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
    if(file_exists($_SESSION['image_user']))
    {
    	$details_image_user = getimagesize($_SESSION['image_user']); //on récupère les infos de l'image uploadée
    	$details_image_user_redimentionnee = getimagesize('temp/'.$_SESSION['nom_image_user']); //on récupère les infos de l'image redimentionnée    
    	// Ouverture image uploadée
    	switch ($details_image_user['mime']) {
    		case 'image/jpeg':
    			$image_user = imagecreatefromjpeg($_SESSION['image_user']);
    			break;
    		case 'image/gif':
    			$image_user = imagecreatefromgif($_SESSION['image_user']);
    			break;
    		case 'image/png':
    			$image_user = imagecreatefrompng($_SESSION['image_user']);
    			imagealphablending($image_user, true);
    			imagesavealpha($image_user, true);
    			break;
    		default:
    			return false;
    	}
     
    	// image DE FOND : wanted
    	$wanted_image_url = 'images/wanted.png';
    	$wanted = imagecreatefrompng($wanted_image_url);
    	imagealphablending($wanted, true);
    	imagesavealpha($wanted, true);
     
    	// dimensions voulues
    	$largeur_wanted = 950;
    	$hauteur_wanted = 1311;
     
    	// centrage
    	$centrage_x = ($largeur_wanted - $details_image_user_redimentionnee[0]) / 2;
    	$centrage_y = ($hauteur_wanted - $details_image_user_redimentionnee[1]) / 2 - 10;
     
    	// on copie l'image sur wanted
    	imagecopymerge($wanted,$image_user, $centrage_x, $centrage_y, 0, 0, $details_image_user_redimentionnee[0],$details_image_user_redimentionnee[1],80);
     
    	// nom de l'image
    	imagepng($wanted,'temp/img_'.$_SESSION['time_image_user'].'.png');
     
    }
    Dernière modification par Invité ; 20/12/2013 à 12h01.

  5. #5
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 493
    Points : 295
    Points
    295
    Par défaut
    Super, il ne reste plus que la couleur (noire) transparente.

    Voici ce que ça donne avec ton code :



    Une idée ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai éditer/modifié mon message précédent (plus simple).

    Par contre, pas testé pour la transparence...
    Dernière modification par Invité ; 20/12/2013 à 12h34.

  7. #7
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 493
    Points : 295
    Points
    295
    Par défaut
    Vraiment, je te remercie de ton aide
    Par contre, ton dernier code ne fonctionne plus
    Je reviens à la case départ ...
    Il faut bien passer par une "image bidon"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // image wanted
    $image_wanted = imagecreatefrompng("wanted.png");
    imagealphablending($image_wanted, true);
    imagesavealpha($image_wanted, true);

Discussions similaires

  1. Bitmap 256 couleurs
    Par XavierBreuer dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/05/2006, 14h15
  2. Palette 256 couleurs
    Par kivan666 dans le forum Graphisme
    Réponses: 9
    Dernier message: 01/04/2006, 23h39
  3. Réponses: 1
    Dernier message: 30/12/2005, 17h14
  4. Vitesse de transfert en mode VESA 800*600 256 couleurs
    Par chep dans le forum Assembleur
    Réponses: 9
    Dernier message: 28/05/2004, 11h53
  5. DirectDraw: Créer des surfaces 256 couleurs
    Par Magus (Dave) dans le forum DirectX
    Réponses: 5
    Dernier message: 14/10/2002, 22h28

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