Re: Les SVG sont des images comme les autres

Cerdic <[email protected]>
Newsgroups gmane.comp.web.spip.devel
Message-ID <10074592-74f3-4e89-bf79-8f9cc1b8bbeb@Spark>
Hello,

oui alors :

- les filtres images sont conçus pour s’appliquer exclusivement sur les balises <img>. Peut-être que dans le futur on pourra étendre aux balises <svg> mais pour le coup c’est un chantier plus ambitieux qui a pas mal d’impacts à tous les étages, à creuser donc

- c’est pas parce qu’une image est au format svg qu’on veut forcément l’embedder dans une balise <svg> dans le html. C’est sans doute vrai pour des icones ou petits fichiers légers, mais si on a affaire à un SVG contribué par l’utilisateur qui fait 100ko+ c’est pas super malin : ça alourdit le html, et on se prive du cache navigateur sur les ressources images.

Je ne pense donc pas que prévoir un filtre automatique qui switch du img au svg selon l’extension soit pertinent.
Ça peut-être utile oui, mais ça dépendra fortement du contexte, des choix d’implémentation, et des arbitrages rapidité.

Il me semble qu’en l’état le plus malin serait un filtre ajouté en fin de chaine sur les traitements images, genre

[(#LOGO_ARTICLE|image_reduire{…}|image_rotation{…}|image_flou{…}|embed_svg_si_malin)]

filtre embed_svg_si_malin qui itère sur les balises <img> du contenu (car on peut appliquer la même chose sur #TEXTE, récupère l’attribut src, regarde si c’est un SVG, si il remplit les conditions qu’on veut imposer (poids maxi en octets par exemple), et le cas échéant remplace la balise img par une balise svg.

Cela a le mérite d’être applicable à toute image contribuée y compris via un modèle fourni par un plugin ou tout autre chose de ce cas.

A noter que ça pourrait être l’objet d’un traitement automatique via le pipeline appelé en fin de traitement sur les images, et donc éventuellement packagé dans un plugin qui fait ça et permet de personnaliser le critère de poids (et d’autres critères éventuels?)

En ce qui concerne les attributs height/width du SVG, ils sont normalement automatiquement ajoutés au SVG qui n’en a pas, en récupérant les infos de la viewbox.
Donc si il y a des cas qui ne marchent pas, il serait bien d’avoir le code pour reproduire et corriger, en effet !

--
Cédric
Le 16 oct. 2019 à 09:19 +0200, Charles Razack <[email protected]>, a écrit :
> Complément d'enquête : des fois on ne sait pas à l'avance à quel type d'image on a affaire.
> Si c'est un svg, on aimerait qu'il soit embeddé (donc |balise_svg), sinon on veut le tag <img> normal (donc |balise_img).
> Ça amène à faire des tests dans les squelettes de la sorte :
> [(#EXTENSION}|=={svg}|oui) [(#FICHIER|balise_svg)] ]
> [(#EXTENSION}|=={svg}|non) [(#FICHIER|balise_img)] ]
> Dans ces cas là il serait pratique d'avoir un filtre qui fasse ça automatiquement.
> Sémantiquement, je ne sais pas quel serait le nom le plus approprié, peut-être « balise_image » tout simplement : ça ne présuppose pas du tag qui va être produit (<img> ou <svg>), ça dépend de l'image.
> Un exemple de fonction que j'utilise de mon côté : http://spip.pastebin.fr/58813
> if (!function_exists('filtre_balise_img_svg')) {
> function filtre_balise_img_svg($src, $alt='', $class='') {
>   include_spip('inc/filtres');
>   $balise = '';
>   // Récupérer le chemin si c'est déjà un tag <img>
>   if (substr(trim($src), 0, 4) === '<img') {
>     $src = extraire_attribut($src, 'src');
>   }
>   // Retrouver l'extension
>   $src = supprimer_timestamp($src);
>   $extension = pathinfo($src, PATHINFO_EXTENSION);
>   // Si c'est un svg, on embed
>   if ($extension === 'svg') {
>     $balise = filtrer('balise_svg', $src, $alt, $class);
>   // Sinon, balise_img si pas déjà le cas
>   } else {
>     $balise = filtrer('balise_img', $src, $alt, $class);
>   }
>   return $balise;
> }
> }
>
> Le 15/10/2019 à 21:19, nicod_ a écrit :
> > Un autre truc que je remarque à l'usage : sur un svg qui n'a pas d'attribut width dans le <svg>, image_reduire n'applique rien du tout.
> >
> > Alors oui, on peut styler les svg en css, mais c'est moins propre : quand tu affiches la page sans css par exemple, le svg perd sa dimension.
> >
> > Je m'attendrais à ce que image_reduire ajoute un attribut width, qu'en pensez vous ?
> >
> > Autre truc : on peut enchainer balise_img et image_reduire, mais pas avec balise_svg
> > #CHEMIN{images/machin.png}|balise_img|image_reduire{5}  OK
> > #CHEMIN{images/machin.svg}|balise_svg|image_reduire{5}  Pas de réduction
> >
> > Là aussi, je m'attendrais à ce que le fonctionnement soit similaire non ?
> >
> _______________________________________________
> liste: https://listes.rezo.net/mailman/listinfo/spip-dev
> doc: http://www.spip.net/
> dev: http://trac.rezo.net/trac/spip/
> irc://irc.freenode.net/spip
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.