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] Perte de qualité lors de la superposition de 2 petites images sur une autre


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Par défaut [GD] Perte de qualité lors de la superposition de 2 petites images sur une autre
    Bonjour,

    J'ai un petit problème avec une image.

    J'ai une image de départ ou je souhaite ajouter 2 petites images dessus.
    Les 2 images sont uploadées ensuite je les redimensionne donc ça c'est ok, les images sont toujours belles, pas de problème de couleur ni rien.

    Ensuite je met la 1er image sur mon image de départ donc là c'est ok aussi.
    Par contre quand je met ma 2eme image sur l'image de départ (pas au même endroit que la 1er bien sur) les couleurs ne sont pas belle, c'est comme s'il n'y avait pas "assez de couleur" (l'image est de trés mauvaise qualité).

    Pourtant la 2eme image quand je la redimensionne et que je l'enregistre elle est bien, pas de problème de couleur.

    Voici mon code pour mettre la 2eme image sur l'image de départ :

    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
    $source = imagecreatefrompng("http://www.monsite.com/images/image1.png"); // la 1ère image
    $destination = imagecreatefrompng("http://www.minsite.com/images/image_depart.png"); // l'image de départ
     
    $largeur_source = imagesx($source2);
    $hauteur_source = imagesy($source2);
    $largeur_destination = imagesx($destination2);
    $hauteur_destination = imagesy($destination2);
     
    $destination_x = $largeur_destination - $largeur_source - 352;
    $destination_y =  $hauteur_destination - $hauteur_source - 5;
     
    // On met la 1ère image dans l'image de départ
     imagecopymerge($destination2, $source2, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 100);
     
    //On enregistre
    imagepng($destination, 'images/image_depart.png');
    Ce code est le même pour les 2 images donc je ne vois pas pourquoi la 2eme image n'est pas de bonne qualité (en plus l'image est enregistré et elle est de bonne qualité c'est juste quand je fait imagecopymerge pour la mettre sur l'image de départ qu'elle n'est plus belle) ! Que faut-il faire ?

    Merci d'avance pour vos réponses

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 38
    Par défaut
    Coucou

    As-tu essayé en utilisant imagecopyresampled() ???

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Par défaut
    Avec imagecopyresampled() ça revient au même.. la qualité des images n'est pas bonne..

    Personne n'a une idée d'où peut venir ce probléme ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Par défaut
    salut,
    je pense que la taille de ton image dest n'est pas proportionelle a la taille de l'image source, essaye ça par exemple ça te donnera une image proportionelle en tenant compte si l'image est verticale ou horizontale tout en limitant les tailles max si tu redimentionne une image haute res par exemple :

    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
     
            $size = getimagesize($im_src); 		    	
    	$src_w = $size[0]; 				
    	$src_h = $size[1]; 
     
    	if($src_w < $src_h){
     
    		$dst_w = 140;
     
    		// Teste les dimensions tenant dans la zone
    		$test_h = round(($dst_w / $src_w) * $src_h);
    		$test_w = round(($dst_h / $src_h) * $src_w);
     
    		// Si Height final non précisé (0)
    		if(!$dst_h) $dst_h = $test_h;
     
    		// Sinon teste quel redimensionnement tient dans la zone
    		if($dst_h > 200) $dst_h = 200;
     
    	}else{
     
    		$dst_h = 140;		
     
    		// Teste les dimensions tenant dans la zone
    		$test_h = round(($dst_w / $src_w) * $src_h);
    		$test_w = round(($dst_h / $src_h) * $src_w);
     
    		// Si Height final non précisé (0)
    		if(!$dst_w) $dst_w = $test_w;
     
    		// Sinon teste quel redimensionnement tient dans la zone
    		if($dst_w > 200) $dst_w = 200;
     
    	}	
     
    	$dst_im = imagecreatetruecolor($dst_w,$dst_h);
    donc ce que je te propose c'est de redim tes images avant de les superposer.
    jéspére que ça aide,
    a+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Par défaut
    je redimenssionne déjà les images avant de les mettre sur l'image de départ, voici le code pour redimensionner les images :

    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
     
     
    $ratio = .5;
    // Calcul des nouvelles dimensions
    list($largeur, $hauteur) = getimagesize("http://www.monsite.com/".$image1); //list est un moyen plus pratique pour ne récupérer que ce qu'on veut
    $n_largeur = $largeur * $ratio;
    $n_hauteur = $hauteur * $ratio;
     
     
    //création de la destination
    $destination = imagecreatetruecolor($n_largeur, $n_hauteur);
     
    //on ouvre la source
    $source = imagecreatefrompng("http://www.monsite.com/".$image1);
     
    // Redimensionnement
    imagecopyresampled($destination, $source, 0, 0, 0, 0, $n_largeur, $n_hauteur, $largeur, $hauteur);
     
    //imagepng ($destination);  //Affiche l'image
    imagepng($destination, 'images/image1bis.png'); //Enregistre la miniature
     
    imagedestroy($destination);
    imagedestroy($source);

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Par défaut
    si t'as pas besoin de les fusionner essaye imagecopy() peut être que ça marche!!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Par défaut
    J'ai déjà testé avec imagecopy() c'est pareil

    Ce qui est bizar c'est que l'image que je met en 1er est toujours bien et la 2eme non et si j'inverse c'est pareil.

    je ne vois vraiment pas d'où vient le problème !

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Par défaut
    j'ai trouvé un script qui dis de faire la copie sur des grandes images puis redim l'image ontenue, le script est écris pour une seule image mais essaye de l'adapter; peut être que ça marche désolé j'ai pas le temps pour le tester.

    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
     
        // So easy and nice!
        function wave_region($img, $x, $y, $width, $height,$amplitude = 4.5,$period = 30)
        {
            // Make a copy of the image twice the size
            $mult = 2;
            $img2 = imagecreatetruecolor($width * $mult, $height * $mult);
            imagecopyresampled ($img2,$img,0,0,$x,$y,$width * $mult,$height * $mult,$width, $height);
     
            // Wave it
            for ($i = 0;$i < ($width * $mult);$i += 2)
            {
               imagecopy($img2,$img2,
                   $x + $i - 2,$y + sin($i / $period) * $amplitude,    // dest
                   $x + $i,$y,            // src
                   2,($height * $mult));
            }
     
            // Resample it down again
            imagecopyresampled ($img,$img2,$x,$y,0,0,$width, $height,$width * $mult,$height * $mult);
            imagedestroy($img2);
        }

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Par défaut
    J'ai trouvé la solution, au lieu de mettre les images en PNG ou JPG je les met en GIF et là il n'y a plus de probléme de mauvaise qualité de l'image.

  10. #10
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Si tu trouves que c'est une solution...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Par défaut
    Bah oui si les images était de mauvaise qualité c'est parceque c'était du jpg ou png et ça doit "prendre" trop de couleur !

    De toute façon dans mon code il n'y a aucune erreur qui aurait pu faire une mauvaise qualité de l'image. Surtout que les miniatures de mes images sont de bonne qualité, c'est juste quand je les mettais sur l'image de départ que l'image était de mauvaise qualitée.

    Enfin si tu crois trouver une meilleur solution fais moi en part !!

  12. #12
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    imagecopymerge($destination2, $source2, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 100);
    Regarde du coté du dernier paramètre

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 9
    Par défaut
    oui mais j'ai aussi essayé avec :

    imagecopy($destination2, $source2, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source);

    et ça revenait au même !!

    et même en modifiant le dernier paramétre de imagecopymerge ça ne change rien non + car c'est pour la transparence.

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

Discussions similaires

  1. [WD-2003] Perte de qualité lors de l'insertion d'une image
    Par dacid dans le forum VBA Word
    Réponses: 2
    Dernier message: 08/06/2009, 09h18
  2. Réponses: 1
    Dernier message: 14/04/2008, 11h28
  3. Problème lors du lancement sur une autre machine
    Par poussinphp dans le forum Visual C++
    Réponses: 4
    Dernier message: 01/05/2007, 13h25
  4. Réponses: 3
    Dernier message: 05/01/2006, 15h14
  5. [GD] probleme de perte de qualité lors de miniature de photos?
    Par brasco06 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 23/05/2005, 16h03

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