From e24ceae5857c29f3dbda6ef2d0940e8a06ad3a26 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Thu, 15 Apr 2004 14:41:59 +0000 Subject: [PATCH] =?UTF-8?q?Choix=20de=20la=20m=C3=A9thode=20de=20cr=C3=A9a?= =?UTF-8?q?tion=20de=20vignette=20:=20*=20choisir=20gd1=20ou=20gd2=20*=20e?= =?UTF-8?q?ssayer=20imagemagick=20en=20mode=20ligne=20de=20commande=20*=20?= =?UTF-8?q?essayer=20imagick=20(module=20imagemagick=20pour=20php4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 1 + IMG/test_image.jpg | Bin 0 -> 24643 bytes ecrire/config-fonctions.php3 | 77 +++++++++++++--- ecrire/inc_config.php3 | 3 + ecrire/inc_filtres.php3 | 127 ++++++-------------------- ecrire/inc_logos.php3 | 132 ++++++++++++++++++++++++++- ecrire/inc_version.php3 | 10 ++- spip_image.php3 | 170 +++++++++++------------------------ 8 files changed, 286 insertions(+), 234 deletions(-) create mode 100644 IMG/test_image.jpg diff --git a/.gitattributes b/.gitattributes index 59667effc3..b3272cdf1f 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 GIT binary patch literal 24643 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 StxI3^C+S&#^3}eyfdAQjd2Mz8 literal 0 HcmV?d00001 diff --git a/ecrire/config-fonctions.php3 b/ecrire/config-fonctions.php3 index 6aaa077f4c..ccdaf43d4c 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électionner la meilleure mé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 " "._T('info_taille_maximale_vignette'); + echo " <INPUT TYPE='text' NAME='taille_preview' VALUE='$taille_preview' class='fondl' size=5>"; + echo " "._T('info_pixels'); - if ($creer_preview == "oui") { - echo " "._T('info_taille_maximale_vignette'); - echo " <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 c98b076218..da770b97e1 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 122d728286..66a19bc55b 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 a3b4eb6dad..aae6492942 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 f178a06703..f6147a036e 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 d162da0c32..58c7080957 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); + } } // -- GitLab