8791 sujets

Développement web côté serveur, CMS

Bonsoir à tous,

Je viens de réaliser un code permettant l'upload de fichier images en PHP. Le script, dans un premier temps, redimensionne l'image de sorte à ce qu'elle ne dépasse pas 700 pixels (de largeur ou hauteur). Ensuite, le script réalise une copie carrée de l'image, de 100*100 pixels. Tout fonctionne normalement pour la majorité des images. Cependant, j'ai un soucis pour ce type d'image :

http://widjoo-pro.com/test/c51ce410c124a10e0db5e4b97fc2af39.png

Voici le rendu, après transfert :

http://widjoo-pro.com/test/c51ce410c124a10e0db5e4b97fc2af39_square.png

L'idéal serait d'avoir un fond blanc autour ... j'ai bien essayé imagefill(), mais celà supprime également les zones noires qu'il y a sur l'image initiale ...
Voici un aperçu du script, que vous pouvez visualiser et tester ici : http://widjoo-pro.com/test.php (résultat aux adresses des deux images indiquées ci-dessus)


				$image = 'test/'.$fileUrl.'.'.$fileType.'';
				list($imageWidth, $imageHeight) = getimagesize($image);
					if($fileType == 'gif') {
						$source = imagecreatefromgif($image);
					}
					elseif($fileType == 'jpeg' OR $fileType == 'jpg') {
						$source = imagecreatefromjpeg($image);
					}
					elseif($fileType == 'png') {
						$source = imagecreatefrompng($image);
					}
					if($imageWidth <= 100 AND $imageHeight <= 100) {
						$xStart = -50 + ($imageWidth / 2);
						$yStart = -50 + ($imageHeight / 2);
						$sourceWidth = 100;
					}
					else {
						if($imageWidth >= $imageHeight){
							$sourceWidth = $imageHeight;
							$xStart = ($imageWidth / 2) - ($sourceWidth / 2); 
							$yStart = 0;
						}
						elseif($imageWidth <= $imageHeight){
							$sourceWidth = $imageWidth;
							$yStart = ($imageHeight / 2) - ($sourceWidth / 2);
							$xStart = 0;
						}
						else {
							$sourceWidth = $imageWidth;
							$xStart = 0;
							$yStart = 0;
						}
					}
				$destination = imagecreatetruecolor(100, 100);
				imagecopyresampled($destination, $source, 0, 0, $xStart, $yStart, 100, 100, $sourceWidth, $sourceWidth);
				if($fileType == 'gif') {
						imagegif($destination, 'test/'.$fileUrl.'_square.gif');
					}
					elseif($fileType == 'jpeg' OR $fileType == 'jpg') {
						imagejpeg($destination, 'test/'.$fileUrl.'_square.'.$fileType.'');
					}
					elseif($fileType == 'png') {
						imagepng($destination, 'test/'.$fileUrl.'_square.png');
					}



Savez-vous comment régler ce soucis ?
Merci d'avance Smiley smile
Modifié par Gaylord.P (14 Mar 2011 - 23:27)