diff --git a/.gitattributes b/.gitattributes
index 59667effc3e1b99fb6e3d49bf6e6f1b53e07bb47..b3272cdf1f24f69bd2db99da88daa515c7b620b6 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -66,6 +66,7 @@ IMG/icones_barre/quote.png -text
 IMG/test.gif -text
 IMG/test.jpg -text
 IMG/test.png -text
+IMG/test_image.jpg -text
 NAVPICS/petit-logo-spip.gif -text
 NAVPICS/point.gif -text
 NAVPICS/rien.gif -text
diff --git a/IMG/test_image.jpg b/IMG/test_image.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a6916fb5cb2e087a769e1615cf2a75b082b8e9c4
Binary files /dev/null and b/IMG/test_image.jpg differ
diff --git a/ecrire/config-fonctions.php3 b/ecrire/config-fonctions.php3
index 6aaa077f4ce4b8f6bf85c942ae58ad2b702d79d8..ccdaf43d4c856040f19debc75a349a58bdc54c83 100644
--- a/ecrire/config-fonctions.php3
+++ b/ecrire/config-fonctions.php3
@@ -19,7 +19,7 @@ if ($connect_statut != '0minirezo' OR !$connect_toutes_rubriques) {
 }
 
 init_config();
-if ($changer_config == 'oui') {
+if ($changer_config == 'oui' OR $image_process) {
 	appliquer_modifs_config();
 }
 
@@ -32,12 +32,30 @@ echo "<input type='hidden' name='changer_config' value='oui'>";
 //
 // Activer/desactiver la creation automatique de vignettes
 //
-if ($flag_gd) {
+
+
+
+function afficher_choix_vignette($process) {
+	global $taille_preview;
+
+	if ($process == lire_meta('image_process'))
+		$border = 2;
+	else
+		$border=0;
+
+	echo "<td><div align='center' valign='bottom' width='".($taille_preview+5)."'><a href='config-fonctions.php3?image_process=$process'><img src='../spip_image.php3?test_vignette=$process' border='$border' /></a><br />";
+	if ($border) echo "<b>$process</b>";
+	else echo "$process";
+	echo "</div></td>\n";
+}
+
+if ($flag_gd OR $flag_imagick OR $convert_command) {
 	debut_cadre_relief("image-24.gif");
 
 	$gd_formats = lire_meta("gd_formats");
 	$creer_preview = lire_meta("creer_preview");
 	$taille_preview = lire_meta("taille_preview");
+	if ($taille_preview < 10) $taille_preview = 120;
 
 	echo "<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3 WIDTH=\"100%\">";
 	echo "<TR><TD BGCOLOR='$couleur_foncee'>";
@@ -47,25 +65,56 @@ if ($flag_gd) {
 	echo "</TD></TR>";
 
 	echo "<TR><TD ALIGN='$spip_lang_left' class='verdana2'>";
-	if ($gd_formats) {
+	if (($flag_gd AND $gd_formats) OR $flag_imagick OR $convert_command) {
 		afficher_choix('creer_preview', $creer_preview,
 			array('oui' => _T('item_choix_generation_miniature'),
 				'non' => _T('item_choix_non_generation_miniature')));
 		echo "<p>";
-	}
 
-	echo "<div style='border: 1px dashed #404040; margin: 6px; padding: 6px;'>";
-	if ($gd_formats)
-		echo _T('info_format_image', array('gd_formats' => $gd_formats))."<p>";
+		if ($creer_preview == "oui") {
+			echo "<div style='border: 1px dashed #404040; margin: 6px; padding: 6px;'><table width='99%' align='center'><tr>";
+
+			// Tester les formats
+			if ($flag_gd) {
+				$nb_process ++;
+				afficher_choix_vignette($p = 'gd1');
+
+				if ($flag_ImageCreateTrueColor) {
+					afficher_choix_vignette($p = 'gd2');
+					$nb_process ++;
+				}
+			}
+
+			if ($flag_imagick) {
+				afficher_choix_vignette($p = 'imagick');
+				$nb_process ++;
+			}
+
+			if ($convert_command) {
+				afficher_choix_vignette($p = 'convert');
+				$nb_process ++;
+			}
+
+			echo "</tr></table>\n";
+
+			if ($nb_process>1) {
+				echo "<div>"._L("Veuillez s&eacute;lectionner la meilleure m&eacute;thode de fabrication des vignettes en cliquant sur l'image correspondante");
+			} else if ($nb == 1 AND $process == '') {
+				ecrire_meta('image_process', $p);
+				ecrire_metas();
+			}
+
+			echo "<div>";
+
+			if ($gd_formats AND (lire_meta('image_process')=='gd1' OR lire_meta('image_process')=='gd2'))
+				echo '<div>'._T('info_format_image', array('gd_formats' => $gd_formats)).'</div>';
 
-	// Tester les formats acceptes par GD
-	echo "<a href='../spip_image.php3?test_formats=oui&redirect=config-fonctions.php3'>"._T('lien_test_format_image')."</a>";
-	echo "</div>";
+			echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"._T('info_taille_maximale_vignette');
+			echo " &nbsp;&nbsp;<INPUT TYPE='text' NAME='taille_preview' VALUE='$taille_preview' class='fondl' size=5>";
+			echo " "._T('info_pixels');
 
-	if ($creer_preview == "oui") {
-		echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"._T('info_taille_maximale_vignette');
-		echo " &nbsp;&nbsp;<INPUT TYPE='text' NAME='taille_preview' VALUE='$taille_preview' class='fondl' size=5>";
-		echo " "._T('info_pixels');
+			echo "</div>";
+		}
 	}
 
 	echo "</TD></TR>\n";
diff --git a/ecrire/inc_config.php3 b/ecrire/inc_config.php3
index c98b076218005b17f472e71973d13510f9870c65..da770b97e18c19bf622cc37a4fcd5a9bd1ad769a 100644
--- a/ecrire/inc_config.php3
+++ b/ecrire/inc_config.php3
@@ -59,6 +59,8 @@ function init_config() {
 
 		'creer_htpasswd' => 'non',
 
+		'image_process' => '',
+
 		'langue_site' => $lang,
 
 		'multi_articles' => 'non',
@@ -225,6 +227,7 @@ function appliquer_modifs_config() {
 		'jours_neuf',
 		'forum_prive_admin',
 
+		'image_process',
 		'activer_moteur',
 		'activer_statistiques',
 
diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index 122d7282863fccf0c1457e1f4fdb6115f699baee..66a19bc55bbf5bfb4101adf4ebdd0b8b37026b4c 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -523,52 +523,35 @@ function exposer ($id, $identique='on', $different='') {
 // Reduire la taille d'un logo
 //
 
-function reduire_image($img, $taille = 120) {
-
-	if (strlen($img) > 0) {
-		// recuperer le nom du fichier
-		if (eregi("src=\'([^']+)\'", $img, $regs)) $logo = $regs[1];
-		if (eregi("align=\'([^']+)\'", $img, $regs)) $align = $regs[1];
-		if (eregi("name=\'([^']+)\'", $img, $regs)) $name = $regs[1];
-		if (eregi("hspace=\'([^']+)\'", $img, $regs)) $espace = $regs[1];
-
-		if (file_exists($logo)) {
-			$logo = substr($logo, 4, strlen($logo));
-			// recuperer nom de l'image et sa terminaison
-			$nom = substr($logo, 0, strpos($logo, "."));
-			$format = substr($logo, strlen($logo)-3, strlen($logo));
-		
-			// test de recalcul en fonction des dates des fichiers
-			// pour verifier si mise a jour plus recente du logo
-			if (file_exists("IMG/$taille-$nom.$format")) {
-				if (filemtime("IMG/$taille-$nom.$format") > filemtime("IMG/$logo")) {
-					return "<img src='IMG/$taille-$nom.$format' name='$name' border='0' align='$align' alt='' hspace='$espace' vspace='$espace' class='spip_logos' />";
-					$recalculer = false;
-				}
-				else {
-					$recalculer = true;
-				}
-			} else {
-				$recalculer = true;
-			}
-		
-			$gd_formats = lire_meta("gd_formats");
-			if ($recalculer AND ereg($format, $gd_formats)) {
-				// Recuperer l'image d'origine
-				if ($format == "jpg") {
-					$srcImage = ImageCreateFromJPEG("IMG/$logo");
-				}
-				else if ($format == "gif"){
-					$srcImage = ImageCreateFromGIF("IMG/$logo");
-				}
-				else if ($format == "png"){
-					$srcImage = ImageCreateFromPNG("IMG/$logo");
-				}
-				if (!$srcImage) return;
-
+function reduire_image($img, $taille = 120, $taille_y=0) {
+	include_ecrire('inc_logos.php3');
+
+	if (!$taille_y)
+		$taille_y = $taille;
+
+	if (!$img) return;
+
+	// recuperer le nom du fichier
+	if (eregi("src=\'([^']+)\'", $img, $regs)) $logo = $regs[1];
+	if (eregi("align=\'([^']+)\'", $img, $regs)) $align = $regs[1];
+	if (eregi("name=\'([^']+)\'", $img, $regs)) $name = $regs[1];
+	if (eregi("hspace=\'([^']+)\'", $img, $regs)) $espace = $regs[1];
+
+	if (@file_exists($logo) AND eregi("(IMG/.*)\.(jpg|gif|png)$", $logo, $regs)) {
+		$nom = $regs[1];
+		$format = $regs[2];
+		$destination = $logo.'-'.$taille.'x'.$taille_y;
+		if ($preview = creer_vignette($nom, $taille, $taille_y, $format, $destination)) {
+			$vignette = $preview['fichier'];
+			$width = $preview['width'];
+			$height = $preview['height'];
+			return "<img src='$vignette' name='$name' border='0' align='$align' alt='' hspace='$espace' vspace='$espace' width='$width' height='$height' class='spip_logos' />";
+		} else {
+			$taille_origine = @getimagesize("IMG/$logo");
+			if ($taille_origine) {
 				// Calculer le ratio
-				$srcWidth = ImageSX($srcImage);
-				$srcHeight = ImageSY($srcImage);
+				$srcWidth = $taille_origine[0];
+				$srcHeight = $taille_origine[1];
 			
 				if ($srcWidth > $taille OR $srcHeight > $taille) {
 					$ratioWidth = $srcWidth/$taille;
@@ -586,59 +569,7 @@ function reduire_image($img, $taille = 120) {
 					$destWidth = $srcWidth;
 					$destHeight = $srcHeight;
 				}
-				
-				// Initialisation de l'image destination
-				if ($GLOBALS['flag_ImageCreateTrueColor'] AND $destFormat != "gif")
-					$destImage = ImageCreateTrueColor($destWidth, $destHeight);
-				if (!$destImage)
-					$destImage = ImageCreate($destWidth, $destHeight);
-				// Recopie de l'image d'origine avec adaptation de la taille
-				$ok = false;
-				if ($GLOBALS['flag_ImageCopyResampled'])
-					$ok = ImageCopyResampled($destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
-				if (!$ok)
-					$ok = ImageCopyResized($destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
-			
-				// Sauvegarde de l'image destination
-				$destination = "IMG/$taille-$nom.$format";
-				if ($format == "jpg") {
-					ImageJPEG($destImage, $destination, 70);
-				}
-				else if ($format == "gif") {
-					ImageGIF($destImage, $destination);
-				}
-				else if ($format == "png") {
-					ImagePNG($destImage, $destination);
-				}
-				ImageDestroy($srcImage);
-				ImageDestroy($destImage);
-
-				return "<img src='$destination' name='$name' border='0' align='$align' alt='' hspace='$espace' vspace='$espace' class='spip_logos' />";
-			} else {
-				$taille_origine = @getimagesize("IMG/$logo");
-				if ($taille_origine) {
-					// Calculer le ratio
-					$srcWidth = $taille_origine[0];
-					$srcHeight = $taille_origine[1];
-				
-					if ($srcWidth > $taille OR $srcHeight > $taille) {
-						$ratioWidth = $srcWidth/$taille;
-						$ratioHeight = $srcHeight/$taille;
-					
-						if ($ratioWidth < $ratioHeight) {
-							$destWidth = floor($srcWidth/$ratioHeight);
-							$destHeight = $taille;
-						}
-						else {
-							$destWidth = $taille;
-							$destHeight = floor($srcHeight/$ratioWidth);
-						}
-					} else {
-						$destWidth = $srcWidth;
-						$destHeight = $srcHeight;
-					}
-					return "<img src='IMG/$logo' name='$name' width='$destWidth' height='$destHeight' border='0' align='$align' alt='' hspace='$espace' vspace='$espace' class='spip_logos' />";
-				}
+				return "<img src='$logo' name='$name' width='$destWidth' height='$destHeight' border='0' align='$align' alt='' hspace='$espace' vspace='$espace' class='spip_logos' />";
 			}
 		}
 	}
diff --git a/ecrire/inc_logos.php3 b/ecrire/inc_logos.php3
index a3b4eb6dad1e4ab958fa4185dee7965398d1b809..aae6492942ca88301867241d50deaa7f99ed1223 100644
--- a/ecrire/inc_logos.php3
+++ b/ecrire/inc_logos.php3
@@ -6,9 +6,6 @@ if (defined("_ECRIRE_INC_LOGOS")) return;
 define("_ECRIRE_INC_LOGOS", "1");
 
 
-include_ecrire ("inc_admin.php3");
-
-
 function get_image($racine) {
 	if (@file_exists("../IMG/$racine.gif")) {
 		$fichier = "$racine.gif";
@@ -172,4 +169,133 @@ function afficher_logo($racine, $titre) {
 }
 
 
+//
+// Creation automatique d'une vignette
+//
+
+function creer_vignette($image, $newWidth, $newHeight, $format, $destination, $process='AUTO', $force=false) {
+	global $convert_command;
+
+	if ($process == 'AUTO')
+		$process = lire_meta('image_process');
+
+	// liste des formats qu'on sait lire
+	$formats_lecture = array('jpg','png','gif');
+
+	// si le doc n'est pas une image, refuser
+	if (!eregi(",$format,", ",".join(',', $formats_lecture).","))
+		return;
+
+	// chercher un cache
+	while (list(,$fmt) = each ($formats_lecture))
+		if (@file_exists($destination.'.'.$fmt)) {
+			$vignette = $destination.'.'.$fmt;
+			@unlink($vignette);
+		}
+
+	// utiliser le cache ?
+	if ($force OR !$vignette OR (@filemtime($vignette) < @filemtime($image))) {
+
+		// Calculer le ratio
+		if (!$srcsize = @getimagesize($image)) return;
+		$srcWidth = $srcsize[0];
+		$srcHeight = $srcsize[1];
+		$ratioWidth = $srcWidth/$newWidth;
+		$ratioHeight = $srcHeight/$newHeight;
+
+		if ($ratioWidth < $ratioHeight) {
+			$destWidth = $srcWidth/$ratioHeight;
+			$destHeight = $newHeight;
+		}
+		else {
+			$destWidth = $newWidth;
+			$destHeight = $srcHeight/$ratioWidth;
+		}
+
+		// imagemagick en ligne de commande
+		if ($process == 'convert') {
+			$vignette = $destination.".jpg";
+			$commande = "$convert_command -size ${newWidth}x${newHeight} $image -geometry ${newWidth}x${newHeight} +profile \"*\" $vignette";
+			shell_exec($commande);
+		}
+		else
+		 // imagick (php4-imagemagick)
+		 if ($process == 'imagick') {
+			$vignette = "$destination.jpg";
+
+			$handle = imagick_create();
+			$handle AND imagick_read($handle, $srcImage)
+			AND imagick_resize($handle, $destWidth, $destHeight, IMAGICK_FILTER_UNKNOWN, 0)
+			AND $ok = imagick_write($handle, $vignette);
+
+			if (!$ok) {
+				echo imagick_failedreason( $handle ) ;
+				echo imagick_faileddescription( $handle ) ;
+				return;
+			}
+		} else
+		// gd ou gd2
+		if ($process == 'gd1' OR $process == 'gd2') {
+
+			// Recuperer l'image d'origine
+			if ($format == "jpg") {
+				$srcImage = @ImageCreateFromJPEG($image);
+			}
+			else if ($format == "gif"){
+				$srcImage = @ImageCreateFromGIF($image);
+			}
+			else if ($format == "png"){
+				$srcImage = @ImageCreateFromPNG($image);
+			}
+			if (!$srcImage) return;
+
+			// Choisir le format destination
+			// - on sauve de preference en JPEG (meilleure compression)
+			// - pour le GIF : les GD recentes peuvent le lire mais pas l'ecrire
+			$gd_formats = lire_meta("gd_formats");
+			if (ereg("jpg", $gd_formats))
+				$destFormat = "jpg";
+			else if ($format == "gif" AND ereg("gif", $gd_formats) AND $GLOBALS['flag_ImageGif'])
+				$destFormat = "gif";
+			else if (ereg("png", $gd_formats))
+				$destFormat = "png";
+			if (!$destFormat) return;
+
+			// Initialisation de l'image destination
+			if ($process == 'gd2' AND $destFormat != "gif")
+				$destImage = ImageCreateTrueColor($destWidth, $destHeight);
+			if (!$destImage)
+				$destImage = ImageCreate($destWidth, $destHeight);
+
+			// Recopie de l'image d'origine avec adaptation de la taille
+			$ok = false;
+			if (($process == 'gd2') AND function_exists('flag_ImageCopyResampled'))
+				$ok = @ImageCopyResampled($destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
+			if (!$ok)
+				$ok = ImageCopyResized($destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
+
+			// Sauvegarde de l'image destination
+			$vignette = "$destination.$destFormat";
+			$format = $destFormat;
+			if ($destFormat == "jpg")
+				ImageJPEG($destImage, $vignette, 70);
+			else if ($destFormat == "gif")
+				ImageGIF($destImage, $vignette);
+			else if ($destFormat == "png")
+				ImagePNG($destImage, $vignette);
+
+			ImageDestroy($srcImage);
+			ImageDestroy($destImage);
+		}
+	}
+
+	$size = @getimagesize($vignette);
+	$retour['width'] = $size[0];
+	$retour['height'] = $size[1];
+	$retour['fichier'] = $vignette;
+	$retour['format'] = $format;
+
+	return $retour;
+}
+
 ?>
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index f178a0670331c2e37332fa730b3fcd455bd396c2..f6147a036ed3bf8cc1aa8849388ddb91e30ce813 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -106,6 +106,11 @@ $dossier_squelettes = "";
 // navigateur l'accepte (valable pour apache 1.3 seulement) ?
 $auto_compress = true;
 
+// creation des vignettes avec image magick en ligne de commande : mettre
+// le chemin complet '/bin/convert' (Linux) ou '/sw/bin/convert' (fink/Mac OS X)
+// Note : preferer GD2 ou le module php imagick s'ils sont disponibles
+$convert_command = 'convert';
+
 // faut-il loger les infos de debug dans data/spip.log ?  (peu utilise)
 $debug = false;
 
@@ -208,11 +213,12 @@ $flag_sapi_name = function_exists("php_sapi_name");
 $flag_utf8_decode = function_exists("utf8_decode");
 $flag_ldap = function_exists("ldap_connect");
 $flag_flock = function_exists("flock");
-$flag_ImageCreateTrueColor = function_exists("ImageCreateTrueColor") && function_exists("gd_info");
-$flag_ImageCopyResampled = function_exists("ImageCopyResampled") && function_exists("gd_info");
+$flag_ImageCreateTrueColor = function_exists("ImageCreateTrueColor");
+$flag_ImageCopyResampled = function_exists("ImageCopyResampled");
 $flag_ImageGif = function_exists("ImageGif");
 $flag_ImageJpeg = function_exists("ImageJpeg");
 $flag_ImagePng = function_exists("ImagePng");
+$flag_imagick = function_exists("imagick_create");	// http://pear.sourceforge.net/en/packages.imagick.php
 $flag_multibyte = function_exists("mb_encode_mimeheader");
 $flag_iconv = function_exists("iconv");
 $flag_strtotime = function_exists("strtotime");
diff --git a/spip_image.php3 b/spip_image.php3
index d162da0c32a37e84ea58bd26c0828d6d6c37bbfb..58c7080957c37c1c0ade22ba71d7b0dc811ae7f8 100644
--- a/spip_image.php3
+++ b/spip_image.php3
@@ -8,116 +8,48 @@ include_ecrire("inc_meta.php3");
 include_ecrire("inc_admin.php3");
 include_local("inc-cache.php3");
 
+$taille_preview = lire_meta("taille_preview");
+if ($taille_preview < 10) $taille_preview = 120;
 
-// verifier les formats acceptes par GD
 
-if ($test_formats == "oui") {
-	$gd_formats = Array();
-	if (function_exists('ImageCreateFromJPEG')) {
-		$srcImage = @ImageCreateFromJPEG("IMG/test.jpg");
-		if ($srcImage) {
-			$gd_formats[] = "jpg";
-			ImageDestroy( $srcImage );
+if ($test_vignette) {
+// verifier les formats acceptes par GD
+	if ($test_vignette == "gd1") {
+		$gd_formats = Array();
+		if (function_exists('ImageCreateFromJPEG')) {
+			$srcImage = @ImageCreateFromJPEG("IMG/test.jpg");
+			if ($srcImage) {
+				$gd_formats[] = "jpg";
+				ImageDestroy( $srcImage );
+			}
 		}
-	}
-	if (function_exists('ImageCreateFromGIF')) {
-		$srcImage = @ImageCreateFromGIF("IMG/test.gif");
-		if ($srcImage) {
-			$gd_formats[] = "gif";
-			ImageDestroy( $srcImage );
+		if (function_exists('ImageCreateFromGIF')) {
+			$srcImage = @ImageCreateFromGIF("IMG/test.gif");
+			if ($srcImage) {
+				$gd_formats[] = "gif";
+				ImageDestroy( $srcImage );
+			}
 		}
-	}
-	if (function_exists('ImageCreateFromPNG')) {
-		$srcImage = @ImageCreateFromPNG("IMG/test.png");
-		if ($srcImage) {
-			$gd_formats[] = "png";
-			ImageDestroy( $srcImage );
+		if (function_exists('ImageCreateFromPNG')) {
+			$srcImage = @ImageCreateFromPNG("IMG/test.png");
+			if ($srcImage) {
+				$gd_formats[] = "png";
+				ImageDestroy( $srcImage );
+			}
 		}
-	}
-
-	if ($gd_formats) $gd_formats = join($gd_formats, ",");
-	ecrire_meta("gd_formats", $gd_formats);
-	ecrire_metas();
-}
-
-
-//
-// Creation automatique d'une vignette
-//
-
-function creer_vignette($image, $newWidth, $newHeight, $format) {
-	// Recuperer l'image d'origine
-	if ($format == "jpg") {
-		$srcImage = @ImageCreateFromJPEG($image);
-	}
-	else if ($format == "gif"){
-		$srcImage = @ImageCreateFromGIF($image);
-	}
-	else if ($format == "png"){
-		$srcImage = @ImageCreateFromPNG($image);
-	}
-	if (!$srcImage) return;
-
-	// Calculer le ratio
-	$srcWidth = ImageSX($srcImage);
-	$srcHeight = ImageSY($srcImage);
 
-	$ratioWidth = $srcWidth/$newWidth;
-	$ratioHeight = $srcHeight/$newHeight;
-
-	if ($ratioWidth < $ratioHeight) {
-		$destWidth = $srcWidth/$ratioHeight;
-		$destHeight = $newHeight;
-	}
-	else {
-		$destWidth = $newWidth;
-		$destHeight = $srcHeight/$ratioWidth;
+		if ($gd_formats) $gd_formats = join(",", $gd_formats);
+		ecrire_meta("gd_formats", $gd_formats);
+		ecrire_metas();
 	}
 
-	// Choisir le format destination
-	// - on sauve de preference en JPEG (meilleure compression)
-	// - pour le GIF : les GD recentes peuvent le lire mais pas l'ecrire
-	$gd_formats = lire_meta("gd_formats");
-	if (ereg("jpg", $gd_formats))
-		$destFormat = "jpg";
-	else if ($format == "gif" AND ereg("gif", $gd_formats) AND $GLOBALS['flag_ImageGif'])
-		$destFormat = "gif";
-	else if (ereg("png", $gd_formats))
-		$destFormat = "png";
-	if (!$destFormat) return;
-
-	// Initialisation de l'image destination
-	if ($GLOBALS['flag_ImageCreateTrueColor'] AND $destFormat != "gif")
-		$destImage = ImageCreateTrueColor($destWidth, $destHeight);
-	if (!$destImage)
-		$destImage = ImageCreate($destWidth, $destHeight);
-
-	// Recopie de l'image d'origine avec adaptation de la taille
-	$ok = false;
-	if ($GLOBALS['flag_ImageCopyResampled'])
-		$ok = @ImageCopyResampled($destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
-	if (!$ok)
-		$ok = ImageCopyResized($destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);
-
-	// Sauvegarde de l'image destination
-	$destination = ereg_replace('\.(.*)$','-s',$image).'.'.$destFormat;
-	if ($destFormat == "jpg") {
-		ImageJPEG($destImage, $destination, 70);
-	}
-	else if ($destFormat == "gif") {
-		ImageGIF($destImage, $destination);
+	// et maintenant envoyer la vignette de tests
+	if (ereg("^(gd1|gd2|imagick|convert)$", $test_vignette)) {
+		include_ecrire('inc_logos.php3');
+		if ($preview = creer_vignette('IMG/test_image.jpg', $taille_preview, $taille_preview, 'jpg', "IMG/test_$test_vignette", $test_vignette, true))
+			@header('Location: IMG/test_'.$test_vignette.'.'.$preview['format']);
 	}
-	else if ($destFormat == "png") {
-		ImagePNG($destImage, $destination);
-	}
-	ImageDestroy($srcImage);
-	ImageDestroy($destImage);
-
-	$retour['width'] = $destWidth;
-	$retour['height'] = $destHeight;
-	$retour['fichier'] = $destination;
-	$retour['format'] = $format;
-	return $retour;
+	exit;
 }
 
 
@@ -232,6 +164,8 @@ function ajout_image($source, $dest) {
 function ajout_doc($orig, $source, $dest, $mode, $id_document, $doc_vignette='', $titre_vignette='', $descriptif_vignette='', $titre_automatique=true) {
 	global $hash_id_auteur, $hash, $id_article, $type;
 
+	$flag_immagick = true;
+
 	//
 	// Securite
 	//
@@ -293,27 +227,29 @@ function ajout_doc($orig, $source, $dest, $mode, $id_document, $doc_vignette='',
 	//
 	$creer_preview = lire_meta("creer_preview");
 	$taille_preview = lire_meta("taille_preview");
-	$gd_formats = lire_meta("gd_formats");
 
 	$format_img = strtolower(substr($dest_path, strrpos($dest_path,".")+1, strlen($dest_path)));
 	if ($format_img == "jpeg") $format_img == "jpg";
 	if ($taille_preview < 10) $taille_preview = 120;
 
-	if ($mode == 'document' AND $format_img AND ereg($format_img, $gd_formats) AND $creer_preview == 'oui') {
-		$preview = creer_vignette($dest_path, $taille_preview, $taille_preview, $format_img);
-		$hauteur_prev = $preview['height'];
-		$largeur_prev = $preview['width'];
-		$fichier_prev = $preview['fichier'];
-		$format_prev = $preview['format'];
-		if ($format_prev == "jpg") $format_prev = 1;
-		else if ($format_prev == "png") $format_prev = 2;
-		else if ($format_prev == "gif") $format_prev = 3;
-
-		$query = "INSERT INTO spip_documents (id_type, titre, largeur, hauteur, fichier, date) VALUES ('$format_prev', '', '$largeur_prev', '$hauteur_prev', '$fichier_prev', NOW())";
-		spip_query($query);
-		$id_preview = spip_insert_id();
-		$query = "UPDATE spip_documents SET id_vignette = '$id_preview' WHERE id_document = $id_document";
-		spip_query($query);
+	if ($mode == 'document' AND $creer_preview == 'oui') {
+		include_ecrire('inc_logos.php3');
+		$destination_vignette = ereg_replace("\.$format_img$", "-s", $dest_path);
+		if ($preview = creer_vignette($dest_path, $taille_preview, $taille_preview, $format_img, $destination_vignette)) {
+			$hauteur_prev = $preview['height'];
+			$largeur_prev = $preview['width'];
+			$fichier_prev = $preview['fichier'];
+			$format_prev = $preview['format'];
+			if ($format_prev == "jpg") $format_prev = 1;
+			else if ($format_prev == "png") $format_prev = 2;
+			else if ($format_prev == "gif") $format_prev = 3;
+
+			$query = "INSERT INTO spip_documents (id_type, titre, largeur, hauteur, fichier, date) VALUES ('$format_prev', '', '$largeur_prev', '$hauteur_prev', '$fichier_prev', NOW())";
+			spip_query($query);
+			$id_preview = spip_insert_id();
+			$query = "UPDATE spip_documents SET id_vignette = '$id_preview' WHERE id_document = $id_document";
+			spip_query($query);
+		}
 	}
 
 	//