From 2d92801e5ed9567adfa59a85f7b06787373974da Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Sun, 20 Mar 2005 19:52:25 +0000
Subject: [PATCH] quand on fait tourner un fichier il faut l'enregistrer dans
 le meme format qu'on le lit, sinon il est fini (Steph)

---
 ecrire/inc_getdocument.php3 | 49 +++++++++++++++++++++++++++++++------
 1 file changed, 41 insertions(+), 8 deletions(-)

diff --git a/ecrire/inc_getdocument.php3 b/ecrire/inc_getdocument.php3
index 70f3880065..41b25b8865 100644
--- a/ecrire/inc_getdocument.php3
+++ b/ecrire/inc_getdocument.php3
@@ -631,15 +631,44 @@ function supprime_document_et_vignette($doc_supp) {
 // Faire tourner une image
 //
 function gdRotate ($imagePath,$rtt){
-	if(preg_match("/\.(png)/i", $imagePath))
-		$src_img=ImageCreateFromPNG($imagePath);
-	else if(preg_match("/\.(jpg)/i", $imagePath))
-		$src_img=ImageCreateFromJPEG($imagePath);
-	else if(preg_match("/\.(bmp)/i", $imagePath))
-		$src_img=ImageCreateFromWBMP($imagePath);
+	if(preg_match("/\.(png|gif|jpe?g|bmp)$/i", $imagePath, $regs)) {
+		switch($regs[1]) {
+			case 'png':
+				$src_img=ImageCreateFromPNG($imagePath);
+				$save = 'imagepng';
+				break;
+			case 'gif':
+				$src_img=ImageCreateFromGIF($imagePath);
+				$save = 'imagegif';
+				break;
+			case 'jpeg':
+			case 'jpg':
+				$src_img=ImageCreateFromJPEG($imagePath);
+				$save = 'Imagejpeg';
+				break;
+			case 'bmp':
+				$src_img=ImageCreateFromWBMP($imagePath);
+				$save = 'imagewbmp';
+				break;
+			default:
+				return false;
+		}
+	}
+
+	if (!$src_img) {
+		spip_log("gdrotate: image non lue, $imagePath");
+		return false;
+	}
+
 	$size=@getimagesize($imagePath);
+	if (!($size[0] * $size[1])) return false;
+
+	if (function_exists('imagerotate')) {
+		$dst_img = imagerotate($src_img, $rtt, 0);
+	} else {
 
-	// Sous GD2 : ImageCreateTrueColor
+	// Creer l'image destination (hauteur x largeur) et la parcourir
+	// pixel par pixel (un truc de fou)
 	$process = lire_meta('image_process');
 	if ($process == "gd2")
 		$dst_img=ImageCreateTrueColor($size[1],$size[0]);
@@ -682,9 +711,13 @@ function gdRotate ($imagePath,$rtt){
 			$b--;
 		}
 	}
+	}
 	ImageDestroy($src_img);
 	ImageInterlace($dst_img,0);
-	ImageJPEG($dst_img,$imagePath);
+
+	# obligatoire d'enregistrer dans le meme format, puisque c'est
+	# dans le fichier de depart...
+	$save($dst_img,$imagePath);
 }
 
 function tourner_document($var_rot, $doc_rotate, $convert_command) {
-- 
GitLab