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 18/07/2011, 22h50   #1
Membre actif
 
Inscription : janvier 2007
Messages : 915
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 915
Points : 185
Points : 185
Par défaut imagerotate supprimer fond noir Gif

Bonjour,
J'ai un petit soucis.
J'utilise la fonction
Code :
imagerotate($source,$degres,-1)
Mon soucis, c'est que sur les images GIF, si je laisse le paramètre ignore_transparent à -1 j'ai un message d'erreur :
Citation:
Notice: Undefined variable: file in C:\Program Files (x86)\EasyPHP-5.3.6.0\www\test\jscripts\tiny_mce\plugins\PlugPerso\AfficherImages.php on line 53
Erreur lors de la rotation de
La ligne 53 correspond à la ligne imagerotate.

Je précise que j'utilise la fonction pour le jpeg, le png et ça roule nickel... Alors pourquoi le -1 ne passe pas avec les gifs? Si je remplace le -1 par 0 alors ça fonctionne mais j'ai un fond noir sur l'image...

Merci de votre aide.
jojo86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 23h59   #2
Membre actif
 
Inscription : janvier 2007
Messages : 915
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 915
Points : 185
Points : 185
J'ai pensé à supprimer le fond noir après rotation de mon image, mais le fond n'est pas supprimé partout, et je me retrouve avec du bleu à certains endroits...

Voici le script :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$transparencyIndex = imagecolortransparent($rotation);
$transparencyColor = array('red' => 255, 'green' => 255, 'blue' => 255);
 
if ($transparencyIndex >= 0) {
    $transparencyColor = imagecolorsforindex($rotation, $transparencyIndex);
 
}
 
 
$transparencyIndex = imagecolorallocate($rotation, $transparencyColor['red'], $transparencyColor['green'], $transparencyColor['blue']);
imagefill($rotation, 0, 0, $transparencyIndex);
imagecolortransparent($rotation, $transparencyIndex); 
 
 imagegif($rotation,$img);
jojo86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 01h22   #3
Membre actif
 
Inscription : janvier 2007
Messages : 915
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 915
Points : 185
Points : 185
J'ai réussi à faire une bidouille qui marche pour moi...
A savoir que j'avais une image GIF sur laquelle j'appliquais une rotation avec imagerotate en PHP, mais j'obtenais un fond noir après rotation...

Voici comment j'ai supprimé ce fond :
  • Ajout d'un fond blanc a l'image
  • rotation de l'image
  • suppression du fond blanc
Le code (surement des corrections à apporter, à vous de me dire :
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
function rotation($img,$degres){ //img=chemin vers image exemple: /test/imagesUp/Photo.gif
	$image = getimagesize($img);
	switch ($image[2]) {
		case 1: $source = imagecreatefromgif($img); break;
		case 2: $source = imagecreatefromjpeg($img);  break;
		case 3: $source = imagecreatefrompng($img); break;
		}
 
	if(($image[2] == 1) OR ($image[2]==3)){ //si c'est du gif ou png on ajouter un fond blanc avant rotation
		$nHeight = $image[1];
		$nWidth = $image[0];
		$newImg = imagecreatetruecolor($nWidth, $nHeight); //Créer un fond noir
		$blanche = imagecolorallocate($newImg, 255, 255, 255); //Créer la couleur blanche
		imagefill($newImg, 0, 0, $blanche); //remplis l'image avec la couleur blanche
		imagecopy($newImg, $source, 0, 0, 0, 0, $nWidth, $nHeight); //Fusionner les deux
		$rotation = imagerotate($newImg,$degres,0) or die("Erreur lors de la rotation de ".$file);//Rotation de l'image
		imagecolortransparent($rotation, $blanche);//Supprimer le fond blanc pour restaurer la transparence
	} else {
		$rotation = imagerotate($source,$degres,0) or die("Erreur lors de la rotation de ".$file);
	}	
	switch ($image[2]) {
		case 1: imagegif($rotation,$img); break;
		case 2: imagejpeg($rotation,$img);  break;
		case 3: imagepng($rotation,$img); break; 
		}
	}
Si vous voyez des truques inutiles merci de me le préciser !
jojo86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h18.


 
 
 
 
Partenaires

Hébergement Web