NOTE DES ADMINS
Spip 1.8 permet d’utiliser le filtrereduire_imagequi 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
No discussion
Add a comment
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.
Follow the comments:
|
