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 29/11/2007, 16h31   #1
Invité de passage
 
Inscription : novembre 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 9
Points : 3
Points : 3
Par défaut 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 :
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
angebleu1759 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2007, 21h57   #2
Futur Membre du Club
 
Inscription : juin 2004
Messages : 38
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 38
Points : 18
Points : 18
Coucou

As-tu essayé en utilisant imagecopyresampled() ???
Marshall_Mathers est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 09h38   #3
Invité de passage
 
Inscription : novembre 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 9
Points : 3
Points : 3
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 ?
angebleu1759 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 10h22   #4
Invité régulier
 
Inscription : juillet 2006
Messages : 8
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 8
Points : 5
Points : 5
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 :
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+
Thiouzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 10h33   #5
Invité de passage
 
Inscription : novembre 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 9
Points : 3
Points : 3
je redimenssionne déjà les images avant de les mettre sur l'image de départ, voici le code pour redimensionner les images :

Code :
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);
angebleu1759 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 10h52   #6
Invité régulier
 
Inscription : juillet 2006
Messages : 8
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 8
Points : 5
Points : 5
si t'as pas besoin de les fusionner essaye imagecopy() peut être que ça marche!!
Thiouzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 11h06   #7
Invité de passage
 
Inscription : novembre 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 9
Points : 3
Points : 3
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 !
angebleu1759 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 11h35   #8
Invité régulier
 
Inscription : juillet 2006
Messages : 8
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 8
Points : 5
Points : 5
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 :
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);
    }
Thiouzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 15h05   #9
Invité de passage
 
Inscription : novembre 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 9
Points : 3
Points : 3
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.
angebleu1759 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 15h22   #10
Membre chevronné
 
Avatar de |PaRa-BoL
 
Inscription : novembre 2003
Messages : 737
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : novembre 2003
Messages : 737
Points : 782
Points : 782
Si tu trouves que c'est une solution...
__________________
http://www.ape-project.org/
|PaRa-BoL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 15h28   #11
Invité de passage
 
Inscription : novembre 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 9
Points : 3
Points : 3
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 !!
angebleu1759 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 15h44   #12
Membre chevronné
 
Avatar de |PaRa-BoL
 
Inscription : novembre 2003
Messages : 737
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : novembre 2003
Messages : 737
Points : 782
Points : 782
Citation:
imagecopymerge($destination2, $source2, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 100);
Regarde du coté du dernier paramètre
__________________
http://www.ape-project.org/
|PaRa-BoL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2007, 15h46   #13
Invité de passage
 
Inscription : novembre 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 9
Points : 3
Points : 3
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.
angebleu1759 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 01h57.


 
 
 
 
Partenaires

Hébergement Web