Contrôler la taille des images dans un article.

Parfois les images incluses dans un articles sont trop grandes et anéantissent votre belle mise en page calculée au millimètre. Avec ce filtre contrôlez la taille de ces images et évitez ce genre de problème !

Besoin

Je suis en train de développer un squelette spip en 3 colonnes pour les articles et l’insertion d’images trop grandes à l’intérieure de ceux ci faisait un peut éclater ma maquette. Je suis donc tombé sur le filtre redimlogo qui essayait de donner une taille adapté à un logo. Mais les images à l’intérieure de l’article ne sont pas atteignables. Il restait 2 choix :
-  modifier l’interpréteur spip pour qu’il applique redimlogo dans les articles
-  rester le plus compatible avec les versions à vernir de spip et ne pas modifier le code de spip, donc écrire un filtre pour faire ce que je voulais.

Filtre

Si vous utilisez ce filtre n’oubliez pas qu’il faut également inclure le filtre redimlogo (Redimensionner un logo) dans votre fichier mes_fonctions.php3.

/*
 *   +----------------------------------+
 *    Nom du Filtre :    limit_images_size
 *   +----------------------------------+
 *    Date : 21 septembre 2003
 *    Auteur :  Mortimer Porte (mortimer(dot)porte(at)urbanet(dot)ch)
 *   +-------------------------------------+
 *    Fonctions de ce filtre :
 *        redimensionne si nescessaire les images incluses dans le texte d'un article.
 *        param1: largeur maximale (>0, sinon ignorée)
 *        param2: hauteur maximale (>0, sinon ignorée)
 *        [param3: insérer un lien sur l'image (1= oui,0= non)]
 *    Exemple d'application :
 *    [(#TEXTE|limit_images_size{400,0,1})]
 *   +-------------------------------------+
 *  
 * Pour toute suggestion, remarque, proposition d'ajout
 * reportez-vous au forum de l'article :
 * http://www.uzine.net/spip_contrib/article.php3?id_article=251
*/
function limit_images_size($string, $largeur_maxi=0, $hauteur_maxi=0, $with_link=0) {

$reg = "/<img src='IMG\/([^']+)' ?([^ ]+) width='[^ ]+' ?([^ ]+) height='[^ ]+' (([^/]|\/[^>])+)\/>/";

	preg_match_all ($reg, $string, $matches);
	
	$to_return = $string;

	for ($i=0; $i< count($matches[0]); $i++) {
		$img = $matches[1][$i];
		$bef = $matches[2][$i];
		$aft = $matches[4][$i];
		$btw =  $matches[3][$i];
		$size =  redimlogo ($img, $largeur_maxi, $hauteur_maxi);

		$before = "";
		$after = "";

		if($with_link) {
			$before = "<a href='IMG/".$img."'>";
			$after = "</a>";
		}

          $to_return = preg_replace("<".$matches[0][$i].">",
                                $before."<img src='IMG/".$img."' ".$size." ".$bef." ".$btw." ".$aft." />".$after,
                                $to_return,1);
	}	

	return $to_return;
}
// FIN du Filtre limit_images_size

il prend au maximum 3 paramètres :

  1. la largeur maximale (>0 sinon ignorée)
  2. la hauteur maximale (>0 sinon ignorée)
  3. si l’on veut ajouter un lien sur l’image (1=oui, 0=non).

Utilisation

on l’utilisera donc de la façon suivante :
[(#TEXTE|limit_images_size{400,0,1})]

Le dernier paramètre permet de spécifier si l’on veut (ou pas) un lien sur l’image. En effet l’image réduite perd de sa définition, on peut donc vouloir proposer à l’utilisateur un lien (sur l’image) pour ouvrir l’image à sa taille originale.

donc :
<img='IMG/jpg/img1.jpg' width=... height=... ...>
deviendra :
<a href='IMG/jpg/img1.jpg'><img='IMG/jpg/img1.jpg' width=... height=... ...></a>

un exemple

Discussion

19 discussions

  • Bonsoir

    cela ne focntionne pas :
    [(#TEXTE|limit_images_size0,200,0)]

    j’obtiens
    Filtre limit_images_size non défini

    deplus mes_fonctions.php est bien à la racine
    merci pour votre aide

    Répondre à ce message

  • 1

    Bonjour,
    J’ai eu un problème un peu similaire (sur la taille des images) et je n’ai pas trouvé de réponse.

    L’objectif est de réduire la taille des fichiers image présentes dans le dossier /IMG/jpg afin de limiter l’espace disque utilisé par le site.

    En effet beaucoup de rédacteurs incluent des images sans trop savoir les réduire. On se retrouve avec des images en millions de pixels et donc des fichiers de 1 ou 2 Mo facile...

    Or ces images ne seront jamais affichées dans ces formats sur les articles.

    On ne peut pas simplement réduire les images du dossier jpg et les transférer car la base de données de SPIP (qui contient taille du fichier, résolution H, résolution W) est alors erronée et les images ne s’affichent pas correctement.

    J’ai donc fait un petit script shell qui réduit les images et crée un fichier de commandes sql à exécuter ensuite sur la base de donnée. Ce script utilise ImageMagick pour redimensionner les images.

    L’avantage est que le calcul de réduction des images est effectué en local donc sans limite de temps d’exécution de requète (qui pourrait être contraignant pour de trop grandes images côté serveur).

    Je suis passé d’un site de 100Mo à une occupation de 18Mo.

    Je joins SPIP_reduce_all_images_to_save_space.zip contenant le script webclean.sh et un howto.txt

    Il faut renommer le fichier .png en .zip pour pouvoir accéder au contenu de l’archive (.zip refusé).

    Le manuel plus détaillé s’affiche lors de l’appel du script sans arguments.

    Ca peut toujours servir aux utilisateurs linux et donner des idées...

    Il est clair que des développeurs SPIP peuvent faire beaucoup mieux (un plugin ?) mais je me dis que ça peut toujours dépanner en attendant !

    TanaT.

    Répondre à ce message

  • 2

    bonjour, cette contrib ne marche pas avec la 1.8.2.g, il n’y a pas d’erreurs mais simplement les images ne se redimensionne plus.

    C’est bien embettant car je voulais mettre à jour mon site en 1.8.1 pour la faille de securité.

    si quelqu’un à une idée du probleme ? ou une autre sugestion pour avoir la meme chose que cette contrib compatible 1.8.2.g.

    (je pense que c’est au niveau des nouvelles options de la 1.8.2)

    • Le filtre |reduire_image incluse dans la distribution de SPIP depuis la 1.8.2 fait la même chose et encore plus et mieux ;) (voir la doc)

    • oui Mortimer je connais cette fonction elle marche bien et j’ai aussi testé avec. mais elle ne permet pas d’avoir le lien de l’image à taille réel sur l’image reduite dans le texte.

      C’est dommage quand on a sur le server des images en grande résolutions et de ne pas pouvoir les visionner en 1 simple click.

      ya peut-etre un moyen de rajouté le lien vers l’original dans le filtre

      |reduire_image  

       ?

    Répondre à ce message

  • Bonjour,
    je ne comprend pas, je rajoute mes_fonctions.phph3 avec reduire_all_images.
    Et spip me répond :Erreur : filtre « reduire_all_images » non défini
    Je suis chez Free
    (http://steph.brette.free.fr/spip/)

    Voilà ma boucle :


    [(#TEXTE|reduire_all_images500,x)]


    Avez-vous une Idée ?

    Répondre à ce message

  • 6

    bonjour,
    je viens de copier ce filtre dans mes_fonctions et l’ai appelé dans mon squelette article, comme ça :

    [(#TEXTE|limit_images_size{200,0,0})]

    j’ai ajouté un overflow:hidden à mon div d’article pour éviter l’éclatement mais... bouhouhou ! l’image n’est pas redimentionnée :"(

    quelqu’un a une idée ?
    merci

    • à quoi il ressemble ce div ?

    • bonjour,

      c’est un div float:left et width:600px
      dans lequel est affiché le texte de l’article.
      c’est pour ça que ce filtre m’interesse, pour ne pas avoir à « couper » les images avec l’overflow

      je suis sous SPIP 1.7.2 et ma boucle(articles) englobe tout le squelette, de à

    • pour reprendre mon texte :

      je suis sous SPIP 1.7.2 et ma boucle(articles) englobe tout le squelette, de <html> à </html>

      stef

    • Mortimer

      désolé pour le retard...

      je ne pense pas que le problème vienne de la div ou de la boucle. Peut être c’est un bugs dans le code. Essai de mettre cette ligne :

      	$reg = "/<img src='IMG\/([^']+)'(.*?)width='[0-9]+'(.*?)height='[0-9]+'(.*?)>/";

      à la place de la première ligne du filtre qui affecte $reg.

      J’espere que cela aidera.

    • slt moi j ai une image de 46ko qui ne veut meme pas se télécharger d’un de mes fichier vous avez une petite idée

    • Je ne comprends pas ton problème.

      peut être que tu pourrais expliquer un peu mieux...

    Répondre à ce message

  • 11

    J’ai un problème sur ce script, pourtant, j’ai recopié l’intégralité.
    Il affiche :
    Warning : Compilation failed : missing ) at offset 105 in /pub/www/spip/mes_fonctions.php3 on line 96

    Ci-dessous la page de code dans mes_fonctions.php
    94 $to_return = preg_replace(« <".$matches[0][$i]."> »,
    95 $before."".$img."".$after,
    96 $to_return,1) ;

    Merci d’avance

    • Cela doit être le bug vignette...
      Pour palier à cela, j’ai une petite solution :

      On ne fait le preg_replace que si c’est nécéssaire, grace à un booléen, mais cela requiert de regrouper les deux fonctions (redim_logo et limite_image_size)...

      Voici ma fonction redim_img ; elle a été adapté aux besoins de mon site mais la rendre plus paramêtrable ne devrai pas poser de problèmes.

      //filtre de redimension automatique des images 
      
      function redim_img($string)
      {
      	$reg = "/<img src='IMG\/([^']+)' ([^ ]+) width=[^ ]+ height=[^ ]+ ([^>]+)>/";
      	preg_match_all ($reg, $string, $matches);
      	
      	$to_return = $string;
      
      	for ($i=0; $i< count($matches[0]); $i++) 
      		{
      		$img = $matches[1][$i];
      		$bef = $matches[2][$i];
      		$aft = $matches[3][$i];
      		$image = "IMG/".$img;
      		$redim="non";
      		if ($img!="") //si l'image existe
      			{
      			$dim_image = @GetImageSize($image);
      			$largeur_image = $dim_image[0];
      			$hauteur_image = $dim_image[1];
      			if ($largeur_image+$hauteur_image>0)  //si l'image est bien rentrée dans la base
      				{
      				if ($largeur_image>=650)
      					{
      					$largeur = 650;
      					$hauteur = round(650*($hauteur_image/$largeur_image));
      					$largeur_image=$largeur;
      					$hauteur_image=$hauteur;
      					$redim="oui";
      					}
      					
      				$param = "height=\"".$hauteur_image."\" width=\"".$largeur_image."\"";
      				}
      			else 
      				$param="";
      			}
      		else
      			$param="";
      		if ($redim=="oui")	
      			$to_return = preg_replace("<".$matches[0][$i].">","<img src='IMG/".$img."' ".$param." ".$bef." ".$aft." >",$to_return,1);
      		}
      	return $to_return;
      }
    • Stéphane

      Il semble qu’il y ait des erreurs si l’article comporte des vignettes...

      Merci Edith pour la correction de ce bug... mais maintenant si je veux avoir les liens sur les images pour les afficher (comme dans le filtre original), qu’est-ce qu’il faudrait rajouter ?

      merci à toi

    • bonjour a tous,

      j’ai étudié un peu la fonction du filtre limit_images_size ;
      mais je ne pense pas que le problème pour le left ou right de la balise viennent de la. Je pensais que le centrage ne se faisait pas car il y avait des bordure, mais ce n’est pas le cas.
      Enfait, ce que je pense, c’est que l’alignement ne se fait pas car dans la partie admin, l’image n’est pas resizé ; donc l’alignement n’est pas possible de ce coté ci.
      Je me demande donc, s’il n’est pas possible de spécifier l’alignement du coté du squelette. Mais alors je ne vois pas comment le faire. Faudrait-il ajouté une variable au filtre pour pouvoir l’inscrire dans la syntaxe SPIP ?

      j’attend vos remarques, si vous en avez ou si vous pensez que ca peut être utile....

      ps : je parle du cas ou les images a resizer aurais un taille importante.

      par avance merci,

    • Mortimer

      Bonjour,

      tu postes tes messages à des endroits bien bizares ;)

      Enfin, je ne suis pas sûr d’avoir bien compris ce problème de right et left. Si l’image est trop large, c’est sûr qu’elle ne sera pas aligné comme il faut...

      Le filtre n’est appliqué que sur l’espace public. Mais sur l’espace public il sera appliqué et l’alignement sera fait. il ne devrait donc pas y avoir de problème.

      En résumé, je ne suis pas sûr de bien comprendre ce que tu veux :(

    • merci, et encore désolé pour le placement du message ( je croyait qu’il serait mis en bas).

      Enfait, le filtre marche très bien, et j’ai bien compris qu’il n’est appliqué que en public. Mais prenons un exemple : j’ai une image de taille bocoup trop grande, le filtre va donc réduire cette taille. Je l’affiche dans mon article avec un , mais l’alignement se fait au milieu de ma page, et n’est pas aligné a gauche avec mon article.
      Si l’image n’est pas trop grande, tout fonctionne. Mais j’ai le cas ou l’image est bocoup plus grande et la impossible de l’aligné comme je veux, elle est automatiquement centré (au milieu).
      voila, je sais pas si j’ai été clair, en tout cas je l’espère.
      Mais le problème se pose bien ché moi.

      merci en tout cas pour tes réponses. :)
      a bientot

      ps:je cherche de mon coté mais je ne vois pas très bien comment faire, surtout si tu me dit que ce problème ne se pose que chez moi

    • désolé,
      l’affichage dans l’article se fait avec un >emb|left<

    • Mortimer

      Chez moi je tourne en 1.8pr1, alors je ne sais plus trop comment c’est fait avec la 1.7.2.

      Enfin, sur mon site, l’alignement de l’image se fait par l’ajout d’un :

      <p align="center">

      pour le centrer
      ou

      align="left"

      dans la balise IMG pour les alignements droit et gauche.

      Si l’image laisse assez de place à droite (ou à gauche), alors l’alignement est fait. Mais si l’image est trop grande, alors l’image prend tout une ligne est a l’air centré.

      Si tu réduis beaucoup l’image, cela ne marche toujours pas ?

    • Très bien merci,
      je vais essayé de faire avec cela.
      Mais la balise IMG et dans ton squelette ? car moi je ne fait l’affichage de l’image que depuis l’espace administrateur...
      Enfin j’ai peur de ne pas tout comprendre.
      Surtout que ca marche pour des images de taille moins importante.

      merci beaucoup pour ton aide en tout cas.
      bye

    • Mortimer

      Justement, je ne suis pas sûr de bien tout comprendre au problème moi non plus ;)

      Cette image se trouve dans l’article, pas dans le squelette.

    • re bonjour,
      je suis vraiment désolé pour toutes ces questions, mais... la je sais pas quoi faire...

      J’ai ajouté le sytème de lettrine proposé sur ce site, j’ai donc dans mon squelette :
      #TEXTE|limit_images_size300,0,1|lettrine

      mais dans ce cas, la lettrine foncionne, mais le resize d’image ne foncionne plus du tout. Quelqu’un voit il ou se trouve le conflit ?

      Merci. :)

    • mais le filtre lettrine est appliqué après le filtre limiter... il ne devrait donc avoir aucune incidance.

    Répondre à ce message

  • Mortimer

    Il y a (à nouveau) un problème avec la regexp quand je teste sur la 1.8pr1. Cette nouvelle regexp marche mieux :

    $reg = "/<img src='IMG\/([^']+)'(.*?)width='[0-9]+'(.*?)height='[0-9]+'(.*?)>/";

    et devrait aussi être compatible avec les versions précédentes. Si un admin veut bien faire la modif ?

    Répondre à ce message

  • 11

    Bravo ! Super boulot :-)
    Un script indispensable pour tout webmaster qui se respecte.

    • Hoo, merci :)

    • carlos peña

      Gracias y felicitaciones

      La boucle DOCUMENTS

      [(#EMBED_DOCUMENT|limit_images_size300,0,1)] ??????

    • Je n’ai pas bien compris la question ?

      mais à la base le filtre ne s’applique qu’à redimentionner les images que Spip inclu dans le texte d’un article... il faut donc l’appliquer sur quelque chose du genre #TEXTE dans une boucle article.

      la boucle va alors rechercher toutes les références à des images dans ce texte et les redimentionner.
      Donc si la balise #EMBED_DOCUMENT retourne quelque chose comme <IMG blabla blabla>...</IMG>, ça devrait théoriquement marcher. Je n’ai jamais essayer, alors si quelqu’un essaye, ça serait cool de reporter :)

    • Fatal error : Call to undefined function : redimlogo() in c :\inetpub\wwwroot\lentreprenaute\mes_fonctions.php3 on line 47

      [(#TEXTE|limit_images_size400,0,1)]
      j’ai copié le code dans mes fonctions et fait un appel
      comme ci dessus j’ai l’erreur fatal du dessus, what’s wrong ?
      Florent

    • voir plus haut (juste avant le code)

      « Si vous utilisez ce filtre n’oubliez pas qu’il faut également inclure le filtre redimlogo (Redimensionner un logo) dans votre fichier mes_fonctions.php3. »

       :)

    • merci mortimer,

      j’avais loupé cette etape !

      sinon j’aimerai bien ouvrir une popup au dimension de l’image plutot que d’aficher l’image dans la meme fenetre.
      ou peut on intervenir pour faire ca sur ce script ?

      Florent

    • Pour ajouter une popup, ou changer le comportement quand l’utilisateur clique, il faut modifier cette partie du code :

      if($with_link) {
      	$before = "<a href='IMG/".$img."'>";
      	$after = "</a>";
      }

      la variable $before est ce qu’il faut ajouter avant la balise image
      la variable $after ce qu’il faut rajouter après.

      ici, on ajoute un lien a href avec le nom de l’image (.$img.), mais on pourrait ajouter d’autres paramètres au href, ou n’importe quoi.

      notez qu’il faut bien passer le dernier paramètre par défaut $with_link à 1 si l’on veut que cela marche.

    • bonjour, j’ai un petit problème avec ce filtre, si quelqu’un pouvait m’aider.

      J’ai tout suivie, donc
      -  > dans mon fichier mes_fonction.php3, j’ai mis le filtre si dessus, et le filtre redimLogo.
      -  >j’ai ajouté le code au sequelette article.
      -  > dans mon article, je place l’image avec la balise

      -  >.... mais voila j’ai un message d’erreur en bas de page :

      Fatal error : Cannot redeclare limit_images_size() (previously declared in ...mes_fonctions.php3:8) in ../mes_fonctions.php3 on line 8

      -  > et le redimensionnement ne se fait pas.
      si quelqu’un pouvait m’expliquer.

      Merci d’avance.

    • Mortimer

      apparemment, il prend 2 fois le fichier mes_fonctions.php3, tu es sûr de ne pas avoir un include(’mes_fonctions.php3’) ou qq chose du genre qui se balade dans un squelette ?

    • ho lala,

      Merci beaucoup mon ami.
      En effet, j’avais mis un include dans le fichier php, comme on fait d’habitude en php...
      Mais désormais ca marche parfaitement.

      Super merci encore... (très rapide la réponse en plus)
      bye

    • Encore juste une petite question :

      je sais pas si c gérable...
      Mais lorsque l’image que je resize et trop grande, les paramètres left et right ne fonctionnent plus. j’aimerais savoir s’il est possible de modifier la fonction pour permettre cela. Car sinon l’affichage ne se fait que au centre.

      Voila je ne sais pas si c’est possible.

      Merci d’avance...

    Répondre à ce message

  • 7

    D’abord le bug

    J’ai constaté que la regexp employée laissait un ’ (simple quote) dans le btw.

    Comme je suis tres tres mauvais en regexp, j’ai pas reussi à modifier cette affaire. Donc une solution est donnée en fin de message dans le code... mais pas très satisafaisante (si le core de SPIP est modifié plus tard, il faudra rebidouiller le filtre).

    ensuite le popup

    Moi j’aime bien l’idée de faire un popup joli à la bonne taille, alors j’ai mis cette fonctionnalité dans le code...

    au total

    Voilà le code :

    function limit_images_size($string, $largeur_maxi=0, $hauteur_maxi=0, $with_link=0) {
    $reg = "/<img src='IMG\/([^']+)' ?([^ ]+) width=[^ ]+ +height=[^ ]+ ([^>]+)>/";
    
    	preg_match_all ($reg, $string, $matches);
    
    	
    	$to_return = $string;
    
    	for ($i=0; $i< count($matches[0]); $i++) {
    		$img = $matches[1][$i];
    		$bef = $matches[2][$i];
    		$aft = $matches[3][$i];
    		//$btw =  $matches[3][$i];
            $btw = "";
    		$size =  redimlogo ($img, $largeur_maxi, $hauteur_maxi);
    
    		$before = "";
    		$after = "";
    
    		if($with_link) {
                $dim_image = @GetImageSize('IMG/'.$img);
                $largeur_image = $dim_image[0];
                $hauteur_image = $dim_image[1];
    			$before = '<a href="#" OnClick="javascript:window.open(\'IMG/'.$img.'\', \'_blank\', '
                    .'\'toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0,'
                    .'width='.$largeur_image.',height='.$hauteur_image.'\')" >';
    			$after = "</a>";
    		}
    		$to_return = preg_replace("<".$matches[0][$i].">",
    				$before."<img src=\"IMG/".$img."\" ".$size." ".$bef." ".$btw." ".$aft." >".$after,
    				$to_return,1);
    	}	
    
    	return $to_return;
    }
    // FIN du Filtre limit_images_size
    • Cette fonction m’intéresse, mais l’inconvénient est que la page devient très lourde à charger puisqu’on charge les images grand format (affichées petit).

      J’aimerais créer une fonction qui fait un lien sur les images vers une image avec le suffixe _big qu’on mettrait sur le site par ftp.

      J’ai essayé, je n’y arrive pas... alors si ça tente quelqu’un...

    • l’expression devient cela :

      $reg = "/<img src='IMG\/([^']+)' ?([^ ]+) width='[^ ]+' ?([^ ]+) height='[^ ]+' (([^/]|/[^>])+)/>/"

      et le replace :

      $to_return = preg_replace("<".$matches[0][$i].">",
      				$before."<img src='IMG/".$img."' ".$size." ".$bef." ".$btw." ".$aft." />".$after,
      				$to_return,1);

      Je corige dans le code

    • je suis con. Le code est déjà publié, j’ai plus le droit de le corriger. Bon, vous pourrez le faire vous même :)
      dśolé.

    • j’ai corrigé l’article, mortimer jette quand même un oeil stp :)

    • cool, il faudra que je regarde les autres bug de cette contrib un de ces jours.

    • Bon, je me suis planté, il faut échapé les / dans l’expression :

      $reg = "/<img src='IMG\/([^']+)' ?([^ ]+) width='[^ ]+' ?([^ ]+) height='[^ ]+' (([^/]|\/[^>])+)\/>/";

      désolé pour le dérangement.

    • Et voilà. j’avais oublié encore un / :

      	$reg = "/<img src='IMG\/([^']+)' ?([^ ]+) width='[^ ]+' ?([^ ]+) height='[^ ]+' (([^\/]|\/[^>])+)\/>/";

    Répondre à ce message

  • Bravo, ca marche impec.

    Juste un petit truc de corrigé : un
    à rajouter.

    if($with_link)
    $before = «  » ;
    $after = « 

     » ;

    Quasi vers la fin.
    Sinon, si le redimensionnement etait trop petit, les commentaires de l’image commencaient sur le coté, et non au centre ce qui est peu esthétique.

    Sinon, deux remarques :

    tout d’abord, est il possible d’ouvrir l’image original dans une pop up, et non dans la meme page ?

    Ensuite, est il possible que l’image, si elle est plus petite que la taille limite de ne pas la rendre cliquable, car ca n’a pas (peu) d’interet ?

    Merci, et bravo.

    Répondre à ce message

  • mybeau

    C’est parfait.
    Le hic c’est que la taille d’une image à afficher
    dépend essentiellement de la résolution d’écran
    du visiteur.

    J’ai plutot capturé cette résolution au login (aidé
    par le fait que dans mon assoc, il faut se logger
    pour acceder au site). Je calcule donc, par utilisateur,
    la taille max à afficher (=largeur écran utilisateur x taux de
    redimension du site) Le taux de redimension est le pourcentage
    de largeur occupé par le texte de l’article par rapport
    a la largeur écran. Dépend du site et non de l’utilisateur)
    Cette taille max calculée est stockée ds les variables
    session car elle dépend de l’utilisateur.
    Quand on doit afficher une image, si sa largeur excède
    la largeur max d’image pour l’utilisateur en session, on
    calcule un ratio qu’on applique a la largeur et a la hauteur
    de l’image.
    Et zou...........

    On en profite pour virer l’horrible petit encart de
    commande qu’Internet Explorer se croit obligé d’afficher
    quand on passe la souris sur l’image.
    Et re-zou....................................

    Répondre à ce message

  • 2

    Pourquoi vouloir redimensionner les images alors que SPIP le fait très bien à la taille que l’on veut.

    Personnellement, je procède ainsi :

    1/ Dans Administration > Administration de site > Configuration du site > Fonction avancées j’autorise la « Génération automatiquement les miniatures des images » et je renseigne le champ « Taille maximale des vignettes générées par le système : »
    Il s’agit de la largeur, la hauteur étant calculée proportionnellement de façon automatique.

    2/ Ensuite, en mode « écrire » il ne faut pas utiliser le mal nommé « Ajouter une image » mais « Ajouter un document ». Evidemment, le document que vous téléchargerez de votre DD sera une image. À ce stade-là, toutes les possibilités vous sont offertes. Soit inclure l’image (appelée alors vignette) automatiquement redimensionnée par SPIP en utilisant <docXX|YY> ou bien l’image en taille originale avec <embXX|YY>.

    Suprême raffinement, vous pouvez choisir vous-même une taille différente en renseignant les champs « Dimensions : » XX x YY pixels.

    Merci de m’indiquer la faille dans la procédure.

    Tyrien

    • Il y a une raison pour laquelle SPIP sépare les images des autres documents. Les « images » sont traitées différemment des « documents multimédia » par SPIP, ce qui peut être très utile pour les sites comme le mien qui doivent séparer les deux types, notamment dans l’affichage des articles. Si tu télécharges les images en tant que documents, et non pas en tant qu’images, cette possibilité disparait.

    • Je n’ai pas possibilité d’administrer la génération auto des imagettes à l’endroit indiqué, sans doute y a-t-il quelque chose a faire au préalable ?

      Pareil, je cherche les fonction de génération des ombres sur les imagettes, pas trouvé non plus, je cherche ;o)))

      Merci.

    Répondre à ce message

  • asso.bachant

    magnifique !

    une images qui fait : 200 x 147 pixels
    LE BLASON

    avec ceci [(#TEXTE|limit_images_size400,0,1)]

    comment quelle devient !

    l’exemple vous semble t’il coherent.
    ICI

    Répondre à ce message

  • 1

    Voilà le message d’erreur que je rencontre lors de l’utilisation du filtre :

    Warning : No ending matching delimiter ’>’ found in /home/collecti/www/public/mes_fonctions.php3 on line 223

    Et la ligne concernée, dans son contexte, dans le code de mon fichier mes_fonctions.php3 :

    $to_return = preg_replace(« <".$matches[0][$i]."> »,

    $before.« < img src=’IMG/".$img."’ ".$size." ".$bef." ".$btw." ".$aft." > ».$after,

    $to_return,1) ; // ligne 223

    (espace ajouté volontairement à l’ouverture du tag IMG en HTML pour éviter interprétation du navigateur)

    Pouvez-vous m’aider ? ce code me semble pourtant identique au vôtre...

    Merci d’avance !

    • Apparemment il fallait rajouter "/" avant le > de fermeture du tag IMG (ligne 222 dans mon code ci-dessus) puisque mes pages sont écrites en xhtml. Si mon expérience peut servir à quelqu’un...

    Répondre à ce message

  • Bravo mortimer !

    Répondre à ce message

  • 1

    Bonjour !

    -  Je n’ai pas très bien compris comment on afit pour utiliser la fonction. Quand je place une image dans un article, je mets <imgX|left> où X est le no de l’image. Comment je le remplace par : [(#TEXTE|limit_images_size{400,0,1})] ?

    -  Est-ce que cette fonction génère une deuxième image redimensionnée ou que l’image originale est simplement redimensionnée par le biais des attributs width et height dans la balise IMG ?

    Merci

    • -  quand tu écrits l’article, il n’y a rien à changer (apparemment il y a quelques pbls avec les documents inclus malheureusement, donc faire attention). C’est quand tu écrits ton squelette pour la page d’article, au lieu de mettre #TEXTE à l’intérieure de ta boucle ARTICLES, il faut mettre [(#TEXTE|limit_images_size400,0,1)]

      -  Ce script en utilise un autre : redimlogo qui recalcule les valeurs WIDTH et HEIGHT de la balise IMG. Il n’y a donc pas création d’une vignette, on compte sur
      le browser pour faire le scale.

      Théoriquement, ce filtre pourrait être la base pour un autre filtre qui crée une vraie vignette et remplace tout la balise IMG, mais je ne connais pas assez le PHP et les librairies d’images existantes pour faire cela.

    Répondre à ce message

  • isabelle A

    Super ! Merci beaucoup. Je débute avec SPIP et j’ai mis en place votre filtre pour faire un album photo en créant une rubrique-10.html. J’ai rajouté le #TEXTE avec le filtre, j’obtiens donc des vignettes. Je vais essayer d’améliorer maintenant, mais j’ai appris bcp de choses.

    Répondre à ce message

  • 1

    Salut,

    Merci pour ce script utile.

    Seul problème : le titre de l’image (quand il y en a un) n’apparaît pas. Seul la description apparaît, mais elle suit l’image sur la gauche au lieu d’être en dessous.

    Ma solution (provisoire) :

    -  très intuitivement (càd, au bonheur la chance, car je n’y connait rien en php), j’ai enlevé la ligne :

    $btw =  $matches[3][$i];

    et enlevé (4 lignes avant la fin) :

    ".$btw."

    Ca a l’air de fonctionner, même si ce ".$btw." doit bien servir à qqch... ;-)

    • Hum, pour être sur de rester compatible, j’essaie de capturer les autres paramètres passés à la balise image (titre, etc) avec $btw, $bef et $aft.
      Mais apparemment, ça ne marche pas totalement comme il faut...

      Si j’ai un peu de temps ces prochains jours, je regarderai ces quelques bugs.

      merci

    Répondre à ce message

  • 3

    Bonne idée que cette fonction, qui évite l’explosion des maquettes.

    Il y a cependant un problème avec les vignettes des documents inétgrées dans le texte, un message d’erreur apparait :

    Warning : Compilation failed : missing ) at offset in monsite/spip/mes fonctions.php on line 296

    Je n’ai pas trouvé la source du problème.

    • et il y a quoi exactement ligne 296 de mes_fonctions.php ?

    • Jean-Marc Tourreilles

      Oups, excuse-moi !

      (...)
      if($with_link) {
      $before = "<a href='IMG/".$img."'>";
      $after = "</a>";
      }
      (...)

      La ligne 296 correspond à

      $after = "</a>";
    • Je fais l’appel exactement comme tu dis qu’il faut faire. Le problème ne se pose que dans les pages qui affichent des vignettes de documents.

      Dans les cas où il n’y a que des images, il n’y a aucun problème, ça fonctionne très bien. Si tu mets des docs dans le #TEXTE, ça part en vrille.

      Voici des pages d’exemples :


      http://www.sahariens.info/spip_sahara3/article.php3?id_article=202&recalcul=oui : ça marche très bien, l’image est retaillée
      Pour info, sans ton filtre, ça donnerait ça :
      http://www.sahariens.info/spip_sahara3/article_2.php3?id_article=202&recalcul=oui


      http://www.sahariens.info/spip_sahara3/article.php3?id_article=426 &recalcul=oui : ça marche pas


      Voilà ce que ça devrait donner
      http://www.sahariens.info/spip_sahara3/article_2.php3?id_article=426 &recalcul=oui


      NB : il y a un autre filtre : « decouper_en_page », mais il n’y a pas d’interaction entre les deux (c’est la première chose que j’ai vérifiée)

      Si on regarde le source, les vignettes sont codées sous la forme suivante :

      cafe-s.jpg (...)

      Il suffirait peut-être de ne pas traiter les images en dessous de la taille maxi ou d’une certaine taille (typiquement les vignettes), ou de ne pas traiter les images à l’intérieur d’un

      (...)

      Je te demande ton aide parce que les expressions régulières et moi, hein... Je tiens à te remercier de ta prise en charge rapide du problème

      Tant que j’y suis, je te propose une idée : pourquoi ne pas permettre aussi la gestion des pourcentages ? L’idée serait de permettre de limiter la taille des images à 80% de la largeur d’affichage, par exemple, un peu sur le modèles des calques. Mais, bon, ceci est une autre histoire, et je ne sais même pas si c’est possible !

      Merci

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom