diff --git a/ecrire/config-fonctions.php3 b/ecrire/config-fonctions.php3 index 40867dc750934f35ab3e824d114df12acf022669..bf4e075a51bd1854ffc4703876edb02c40d58920 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' OR $image_process) { +if ($changer_config == 'oui') { appliquer_modifs_config(); } @@ -52,11 +52,17 @@ function afficher_choix_vignette($process) { if ($flag_gd OR $flag_imagick OR $convert_command) { debut_cadre_relief("image-24.gif"); - $gd_formats = lire_meta("gd_formats"); + $formats_graphiques = lire_meta("formats_graphiques"); $creer_preview = lire_meta("creer_preview"); $taille_preview = lire_meta("taille_preview"); if ($taille_preview < 10) $taille_preview = 120; + // application du choix de vignette + if ($image_process) { + ecrire_meta('image_process', $image_process); + ecrire_metas(); + } + echo "<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3 WIDTH=\"100%\">"; echo "<TR><TD BGCOLOR='$couleur_foncee'>"; echo "<B><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=3 COLOR='white'>"._T('info_generation_miniatures_images')."</FONT></B></TD></TR>"; @@ -99,19 +105,39 @@ if ($flag_gd OR $flag_imagick OR $convert_command) { if ($nb_process>1) { echo "<div>"._T('info_image_process'); - } else if ($nb == 1 AND $process == '') { + } else if ($nb == 1 AND lire_meta('image_process') == '') { ecrire_meta('image_process', $p); ecrire_metas(); } + + // mettre a jour les formats graphiques lisibles + switch (lire_meta('image_process')) { + case 'gd1': + $formats_graphiques = lire_meta('gd_formats'); + break; + case 'gd2': + $formats_graphiques = lire_meta('gd_formats'); + break; + case 'convert': + $formats_graphiques = 'gif,jpg,png'; + break; + case 'imagick': + $formats_graphiques = 'gif,jpg,png'; + break; + } + ecrire_meta('formats_graphiques', $formats_graphiques); + 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>'; + if ($formats_affiche = str_replace(',', ', ', $formats_graphiques)) + echo '<div>'._T('info_format_image', array('gd_formats' => $formats_affiche)).'</div>'; - echo " "._T('info_taille_maximale_vignette'); + echo '<div>'._T('info_taille_maximale_vignette'); echo " <INPUT TYPE='text' NAME='taille_preview' VALUE='$taille_preview' class='fondl' size=5>"; - echo " "._T('info_pixels'); + echo " "._T('info_pixels').'</div>'; echo "</div>"; } diff --git a/ecrire/inc_charsets.php3 b/ecrire/inc_charsets.php3 index 07fafb97fd293584cbc62a308d6088c5e68d09d1..558ac72dfc0d1fd5f780564347344cb5b210273f 100644 --- a/ecrire/inc_charsets.php3 +++ b/ecrire/inc_charsets.php3 @@ -193,7 +193,7 @@ function load_charset ($charset = 'AUTO', $langue_site = 'AUTO') { 193=>'A', 194=>'A', 195=>'A', 196=>'A', 197=>'A', 198=>'AE', 199=>'C', 200=>'E', 201=>'E', 202=>'E', 203=>'E', 204=>'I', 205=>'I', 206=>'I', 207=>'I', 209=>'N', 210=>'O', 211=>'O', 212=>'O', 213=>'O', 214=>'O', - 216=>'O', 217=>'U', 218=>'U', 219=>'U', 220=>'U', 223=>'B', 224=>'a', + 216=>'O', 217=>'U', 218=>'U', 219=>'U', 220=>'U', 223=>'ss', 224=>'a', 225=>'a', 226=>'a', 227=>'a', 228=>'a', 229=>'a', 230=>'ae', 231=>'c', 232=>'e', 233=>'e', 234=>'e', 235=>'e', 236=>'i', 237=>'i', 238=>'i', 239=>'i', 241=>'n', 242=>'o', 243=>'o', 244=>'o', 245=>'o', 246=>'o', @@ -282,7 +282,7 @@ function load_charset ($charset = 'AUTO', $langue_site = 'AUTO') { 7924=>"Y.",273=>"d-",208=>"D-", // allemand - 223=>'ss',228=>'ae',246=>'oe',252=>'ue',196=>'Ae',214=>'Oe',220=>'Ue' + 228=>'ae',246=>'oe',252=>'ue',196=>'Ae',214=>'Oe',220=>'Ue' ); while (list($u,$t) = each($translit_c)) $trans[$u] = $t; diff --git a/ecrire/inc_config.php3 b/ecrire/inc_config.php3 index da770b97e18c19bf622cc37a4fcd5a9bd1ad769a..c98b076218005b17f472e71973d13510f9870c65 100644 --- a/ecrire/inc_config.php3 +++ b/ecrire/inc_config.php3 @@ -59,8 +59,6 @@ function init_config() { 'creer_htpasswd' => 'non', - 'image_process' => '', - 'langue_site' => $lang, 'multi_articles' => 'non', @@ -227,7 +225,6 @@ function appliquer_modifs_config() { 'jours_neuf', 'forum_prive_admin', - 'image_process', 'activer_moteur', 'activer_statistiques', diff --git a/ecrire/inc_documents.php3 b/ecrire/inc_documents.php3 index 0721778f0b3b0dc10ba31ae71ca83e942c52f744..0350bd16a946b3536c54d6d900ab4f66a6545cd3 100644 --- a/ecrire/inc_documents.php3 +++ b/ecrire/inc_documents.php3 @@ -204,7 +204,8 @@ function integre_image($id_document, $align, $type_aff = 'IMG') { $id_type = $row['id_type']; $titre = typo($row['titre']); $descriptif = propre($row['descriptif']); - $fichier = generer_url_document($id_document); + $fichier = $row['fichier']; + $url_fichier = generer_url_document($id_document); $largeur = $row['largeur']; $hauteur = $row['hauteur']; $taille = $row['taille']; @@ -222,31 +223,38 @@ function integre_image($id_document, $align, $type_aff = 'IMG') { $query_vignette = "SELECT * FROM spip_documents WHERE id_document = $id_vignette"; $result_vignette = spip_query($query_vignette); if ($row_vignette = @spip_fetch_array($result_vignette)) { - $fichier_vignette = generer_url_document($id_vignette); + $fichier_vignette = $row_vignette['fichier']; + $url_fichier_vignette = generer_url_document($id_vignette); $largeur_vignette = $row_vignette['largeur']; $hauteur_vignette = $row_vignette['hauteur']; - // verifier l'existence du fichier correspondant sinon le recreer + // verifier l'existence du fichier correspondant $path = ($flag_ecrire?'../':'') . $fichier_vignette; if (!@file_exists($path) AND (!$flag_ecrire OR !@file_exists('../IMG/test.jpg'))) - $fichier_vignette = ''; + $url_fichier_vignette = ''; } } else if ($mode == 'vignette') { - $fichier_vignette = $fichier; + $url_fichier_vignette = $url_fichier; $largeur_vignette = $largeur; $hauteur_vignette = $hauteur; } - // si pas de vignette, essayer de creer une preview - if (!$fichier_vignette) - $fichier_vignette = ($flag_ecrire?'../':'').'spip_image.php3?vignette='.rawurlencode(str_replace('../', '', $fichier)); + // si pas de vignette, utiliser la vignette par defaut + // ou essayer de creer une preview (images) + if (!$url_fichier_vignette) { + if (!ereg(",$extension,", ','.lire_meta('formats_graphiques').',')) { + list($url_fichier_vignette, $largeur_vignette, $hauteur_vignette) = vignette_par_defaut($extension); + } else { + $url_fichier_vignette = ($flag_ecrire?'../':'').'spip_image.php3?vignette='.rawurlencode(str_replace('../', '', $fichier)); + } + } if ($type_aff=='fichier_vignette') - return $fichier_vignette; + return $url_fichier_vignette; - if ($fichier_vignette) { - $vignette = "<img src='$fichier_vignette' border=0"; + if ($url_fichier_vignette) { + $vignette = "<img src='$url_fichier_vignette' border=0"; if ($largeur_vignette && $hauteur_vignette) $vignette .= " width='$largeur_vignette' height='$hauteur_vignette'"; if ($titre) { @@ -518,15 +526,11 @@ function afficher_documents_non_inclus($id_article, $type = "article", $flag_mod } echo "."; - if ($GLOBALS['flag_gd']) { - $creer_preview = lire_meta("creer_preview"); + if (lire_meta("creer_preview") == 'oui') { $taille_preview = lire_meta("taille_preview"); - $gd_formats = lire_meta("gd_formats"); + $formats_graphiques = lire_meta("formats_graphiques"); if ($taille_preview < 15) $taille_preview = 120; - - if ($creer_preview == 'oui') { - echo "<p>"._T('texte_creation_automatique_vignette', array('gd_formats' => $gd_formats, 'taille_preview' => $taille_preview)); - } + echo "<p>"._T('texte_creation_automatique_vignette', array('gd_formats' => $formats_graphiques, 'taille_preview' => $taille_preview)); } echo "</td><td width=20> </td>"; echo "<td valign='top'><font face='Verdana,Arial,Sans,sans-serif' size=2>"; diff --git a/ecrire/inc_logos.php3 b/ecrire/inc_logos.php3 index f69f22b8710a26f49da4676d630dd165d0b5c6cb..ed97063fc019b70921bba814d272f25fa811427f 100644 --- a/ecrire/inc_logos.php3 +++ b/ecrire/inc_logos.php3 @@ -201,14 +201,15 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destination, $p $process = lire_meta('image_process'); // liste des formats qu'on sait lire - $formats_lecture = array('jpg','png','gif'); + $formats_graphiques = lire_meta('formats_graphiques'); + $formats_sortie = array('jpg','png','gif'); // si le doc n'est pas une image, refuser - if (!eregi(",$format,", ",".join(',', $formats_lecture).",")) + if (!eregi(",$format,", ",$formats_graphiques,")) return; // chercher un cache - while (list(,$fmt) = each ($formats_lecture)) + while (list(,$fmt) = each ($formats_sortie)) if (@file_exists($destination.'.'.$fmt)) { $vignette = $destination.'.'.$fmt; if ($force) @unlink($vignette); @@ -218,10 +219,18 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destination, $p if ($force OR !$vignette OR (@filemtime($vignette) < @filemtime($image))) { $creation = true; - if (!$srcsize = @getimagesize($image)) return; - $srcWidth=$srcsize[0]; - $srcHeight=$srcsize[1]; - list ($destWidth,$destHeight) = image_ratio($srcWidth, $srcHeight, $maxWidth, $maxHeight); + + // calculer la taille + if ($srcsize = @getimagesize($image)) { + $srcWidth=$srcsize[0]; + $srcHeight=$srcsize[1]; + list ($destWidth,$destHeight) = image_ratio($srcWidth, $srcHeight, $maxWidth, $maxHeight); + } else if ($process == 'convert' OR $process == 'imagick') { + $destWidth = $maxWidth; + $destHeight = $maxHeight; + } else { + return; + } // imagemagick en ligne de commande if ($process == 'convert') { @@ -229,6 +238,8 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destination, $p $commande = "$convert_command -size ${destWidth}x${destHeight} $image -geometry ${destWidth}x${destHeight} +profile \"*\" ".escapeshellcmd($vignette); spip_log($commande); exec($commande); + if (!@file_exists($vignette)) + return; // echec commande } else // imagick (php4-imagemagick) @@ -237,10 +248,12 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destination, $p $handle = imagick_readimage($image); imagick_resize($handle, $destWidth, $destHeight, IMAGICK_FILTER_LANCZOS, 0.75); imagick_write($handle, $vignette); + if (!@file_exists($vignette)) return; // echec imagick } else // gd ou gd2 if ($process == 'gd1' OR $process == 'gd2') { + // Recuperer l'image d'origine if ($format == "jpg") { $srcImage = @ImageCreateFromJPEG($image); diff --git a/spip_image.php3 b/spip_image.php3 index 40d7951095b985773f63c78629b3a48cf5b4a801..c00001ec4ad0daaad7b9c2f1c874f7465ad65fc7 100644 --- a/spip_image.php3 +++ b/spip_image.php3 @@ -373,25 +373,24 @@ if ($doc_supp) { if ($vignette) { // securite $fichier_vignette = ''; - if (!eregi('^IMG/(.*/)?([^\./]+)\.([a-z0-9]+)$', $vignette, $regs)) exit; - $source = $regs[0]; - $format = $regs[3]; - // $destination = $regs[2].'-s'; // adresse old style - - include_local('inc-cache.php3'); - $destination = 'IMG/'.creer_repertoire('IMG','vignettes').$regs[2].'-s'; // adresse new style - - if (lire_meta("creer_preview") == 'oui') { - $taille_preview = lire_meta("taille_preview"); - if ($taille_preview < 10) $taille_preview = 120; - include_ecrire('inc_logos.php3'); - if ($preview = creer_vignette($source, $taille_preview, $taille_preview, $format, $destination)) - $fichier_vignette = $preview['fichier']; + if (eregi('^IMG/(.*/)?([^\./]+)\.([a-z0-9]+)$', $vignette, $regs)) { + $source = $regs[0]; + $format = $regs[3]; + include_local('inc-cache.php3'); + $destination = 'IMG/'.creer_repertoire('IMG','vignettes').$regs[2].'-s'; // adresse new style + + if (lire_meta("creer_preview") == 'oui') { + $taille_preview = lire_meta("taille_preview"); + if ($taille_preview < 10) $taille_preview = 120; + include_ecrire('inc_logos.php3'); + if ($preview = creer_vignette($source, $taille_preview, $taille_preview, $format, $destination)) + $fichier_vignette = $preview['fichier']; + } } if (!$fichier_vignette) { include_ecrire('inc_documents.php3'); - list($fichier_vignette) = vignette_par_defaut($extension); + list($fichier_vignette) = vignette_par_defaut($format); if (!$fichier_vignette) list($fichier_vignette) = vignette_par_defaut('txt'); }