NOTE DES ADMINS
Spip 1.8 permet d’utiliser le filtrereduire_image
qui a exactement le même effet que celui proposé ici (voir mieux ;-) )
Toutefois des utilisateurs de spip 1.7 peuvent être intéressés par le filtre proposé dans cet article.
En effet, pour voir correctement les détails d’images, les fichiers « logos » sont très « lourd », alors quand on charge 20 ou 30 photos, c’est la galère en 28k !
La solution pour aléger mes pages était de créer des vignettes de mes logos, j’ai donc décidé d’adapter le filtre Redimensionner les images d’un article à la volée à mes besoins :
copiez ce code dans « mes_fonctions.php »
/*Filter Name: vignettes [(#LOGO_ARTICLE|fichier|vignettes{100,center})]
Author: Renato Formato
Modifiée par : Stan LEDEWYN [retourne la balise img modifiée]
mail: renatoformato@virgilio.it
Date: 6/6/2004
License: GPL
URL: www.spip-contrib.net?article.php3?id_article=550
!!!!ne pas oublier d'activer la fonction vignette dans la
partie administrative de spip
*/
function vignettes($texte, $taille ,$align, $axes="both") {
$image="IMG/$texte"; //on construit l'adresse de l'image
//a week in seconds
$maint_delay = 3600*24*7;
//retrieve last mainteinance time
$last_maint_date=@filemtime("IMG/last_maint.txt");
//never done mainteinance. Create last_maint file
if (!$last_maint_date) {
$handle=fopen("IMG/last_maint.txt","w");
fclose($handle);
$last_maint_date=@filemtime("IMG/last_maint.txt");
}
//create resized images
$texte=reduire_image_ex($image,$taille,$axes,$last_maint_date,$maint_delay,$align);
//check last mainteinance+delay<now
if (($last_maint_date+$maint_delay)<time()) {
//do maint
//clear file cache to avoid deleting just touched files
clearstatcache();
do_maint("IMG/resized",$last_maint_date);
touch("IMG/last_maint.txt");
}
return $texte;
}
function do_maint($maint_folder,$last_maint_date) {
//open dir
if ($handle=@opendir($maint_folder)) {
//enumerate files in an array
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$file_array[] = $file;
}
}
closedir($handle);
//process array of files
reset($file_array);
while (list(,$filename)=each($file_array)) {
//check file time
if (filemtime($maint_folder."/".$filename)<$last_maint_date) @unlink($maint_folder."/".$filename);
}
}
}
function reduire_image_ex($img, $taille,$axes="both",$last_maint_date,$maint_delay,$align) {
if (strlen($img) > 0) {
// passage de variable
$logo=$img;
$espace=5; //espace entre l'image et le texte
if ($logo!='') {
$logo = substr($logo, 4, strlen($logo));
// recuperer nom de l'image et sa terminaison
$path = dirname($logo);
if ($path!="") $path="resized/"; //on cré le répertoire "resized"
if (!is_dir("IMG/resized")) @mkdir("IMG/resized");
$basename = basename($logo);
$nom = substr($basename, 0, strpos($basename, "."));
$format = substr($basename, strlen($basename)-3, strlen($basename));
$axes=strtolower($axes);
if ($axes!="both" && $axes!="x" && $axes!="y") $axes="both";
// test de recalcul en fonction des dates des fichiers
// pour verifier si mise a jour plus recente du logo
$imagefile="IMG/$path$taille-$axes-$nom.$format";
if (file_exists($imagefile)) {
$imagetime=filemtime($imagefile);
if ($imagetime > filemtime("IMG")) {
//check filetime and touch if filetime>last maiteinance time + half delay
if ($imagetime<($last_maint_date+$maint_delay/2) and time()>($last_maint_date+$maint_delay/2)) touch($imagefile);
return "<img src='$imagefile' 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;
// Calculer le ratio
$srcWidth = ImageSX($srcImage);
$srcHeight = ImageSY($srcImage);
if (($srcWidth > $taille && ($axes=="both" OR $axes=="x")) OR ($srcHeight > $taille && ($axes=="both" OR $axes=="y"))) {
$ratioWidth = $srcWidth/$taille;
$ratioHeight = $srcHeight/$taille;
//Ridimensiono da altezza (solo se axes!=x)
if ($ratioWidth < $ratioHeight && $axes!="x") {
$destWidth = floor($srcWidth/$ratioHeight);
$destHeight = $taille;
}
else {
$destWidth = $taille;
$destHeight = floor($srcHeight/$ratioWidth);
}
} else {
return $img;
}
// 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 = $imagefile;
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 && ($axes=="both" OR $axes=="x")) OR ($srcHeight > $taille && ($axes=="both" OR $axes=="y"))) {
$ratioWidth = $srcWidth/$taille;
$ratioHeight = $srcHeight/$taille;
if ($ratioWidth < $ratioHeight && $axes!="x") {
$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' />";
}
}
}
}
}
Où téléchargez le fichier joint
Pour l’utilisation, il suffit d’apliquer le filtre comme ceci :
[(#LOGO_ARTICLE|fichier|vignettes{100,center})]
Ou « 100 » est la taille de la vignette et « center » sa position (elle peut prendre left ou right)
Un exemple est disponible à cet emplacement : c2r
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |