Échec du traitement d’image de certains SVG distants s’ils n’ont pas de viewbox #5118

Closed
opened 4 months ago by marcimat · 3 comments
Owner

On le voit sur certains logo dans les listes de https://plugins.spip.net

Pas facile de trouver, mais en fait si on applique un traitement d’image sur une url SVG distante, alors si le SVG n’a pas de viewbox, le traitement (image_recadre a priori) se trompe.

Les mêmes fichiers en local directement ont des traitements qui fonctionnent.

Exemple de code pour reproduire

<h1>#SQUELETTE</h1>

#DUMP

<style>
.box { display: block; border: 1px solid red; }
.img { display: block; border: 1px solid green; }
</style>

#SET{liste,#LISTE{#CHEMIN{avec_viewbox.svg},#CHEMIN{sans_viewbox.svg}}}


#SET{liste,#LISTE{https://files.spip.org/spip-zone/spip-contrib-squelettes/escal-79c88-v4.5.43.svg,https://files.spip.org/core/forum-b85ac-v3.0.3.svg}}

<BOUCLE_svg(DATA){source table, #GET{liste}}>
<div class="box">
[(#VALEUR
	|image_reduire{48}
	|image_recadre{1:1,-,center,transparent}
	|inserer_attribut{class,img})]
</div>
</BOUCLE_svg>

Le premier #SET{liste} ce sont 2 fichiers téléchargés localement 1 avec viewbox, l’autre sans.
Si on l’utilise pour la boucle, ça génère bien 2 images correctes

Local

Le second génère une image incorrecte pour Escal dont le logo n’a pas de viewBox.

Distant

On le voit sur certains logo dans les listes de https://plugins.spip.net Pas facile de trouver, mais en fait si on applique un traitement d’image sur une url SVG distante, alors si le SVG n’a pas de viewbox, le traitement (image_recadre a priori) se trompe. Les mêmes fichiers en local directement ont des traitements qui fonctionnent. Exemple de code pour reproduire ```html <h1>#SQUELETTE</h1> #DUMP <style> .box { display: block; border: 1px solid red; } .img { display: block; border: 1px solid green; } </style> #SET{liste,#LISTE{#CHEMIN{avec_viewbox.svg},#CHEMIN{sans_viewbox.svg}}} #SET{liste,#LISTE{https://files.spip.org/spip-zone/spip-contrib-squelettes/escal-79c88-v4.5.43.svg,https://files.spip.org/core/forum-b85ac-v3.0.3.svg}} <BOUCLE_svg(DATA){source table, #GET{liste}}> <div class="box"> [(#VALEUR |image_reduire{48} |image_recadre{1:1,-,center,transparent} |inserer_attribut{class,img})] </div> </BOUCLE_svg> ``` Le premier `#SET{liste}` ce sont 2 fichiers téléchargés localement 1 avec viewbox, l’autre sans. Si on l’utilise pour la boucle, ça génère bien 2 images correctes ![Local](https://git.spip.net/attachments/45ebdec7-ef3a-48d0-995d-8b2284000eb5) Le second génère une image incorrecte pour Escal dont le logo n’a pas de viewBox. ![Distant](https://git.spip.net/attachments/ec8d7193-a03b-455e-84bb-a87ffb6abb77)

Ça explique ce commentaire que j'ai fait il y a quelques jours :
spip-galaxie/plugins-spip-net#4801

Mais je me demande si le viewbox est pas viré par défaut avec l'outil d'optimisation https://jakearchibald.github.io/svgomg/   proposé dans https://programmer.spip.net/Les-icones-SVG-dans-SPIP

Ça explique ce commentaire que j'ai fait il y a quelques jours : https://git.spip.net/spip-galaxie/plugins-spip-net/issues/4801#issuecomment-34541 Mais je me demande si le viewbox est pas viré par défaut avec l'outil d'optimisation https://jakearchibald.github.io/svgomg/   proposé dans https://programmer.spip.net/Les-icones-SVG-dans-SPIP
Poster
Owner

Mais je me demande si le viewbox est pas viré par défaut avec l'outil d'optimisation https://jakearchibald.github.io/svgomg/ proposé dans https://programmer.spip.net/Les-icones-SVG-dans-SPIP

Ah bah oui, avec les paramètres par défaut ça semble bien la virer.

> Mais je me demande si le viewbox est pas viré par défaut avec l'outil d'optimisation https://jakearchibald.github.io/svgomg/ proposé dans https://programmer.spip.net/Les-icones-SVG-dans-SPIP Ah bah oui, avec les paramètres par défaut ça semble bien la virer.
Owner

Donc : lors de la copie locale on appele la sanitisation SVG, qui elle même commence par forcer les unités de la viewbox
https://git.spip.net/spip/medias/src/branch/master/sanitizer/svg.php#L40

Mais paf le chien : si on avait pas de viewbox et seulement un width/height la dite fonction forçait une viewbox par défaut
https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/svg.php#L287

C'est don corrigé par #5201

Donc : lors de la copie locale on appele la sanitisation SVG, qui elle même commence par forcer les unités de la viewbox https://git.spip.net/spip/medias/src/branch/master/sanitizer/svg.php#L40 Mais paf le chien : si on avait pas de viewbox et seulement un width/height la dite fonction forçait une viewbox par défaut https://git.spip.net/spip/spip/src/branch/master/ecrire/inc/svg.php#L287 C'est don corrigé par https://git.spip.net/spip/spip/pulls/5201
cerdic closed this issue 2 months ago
Sign in to join this conversation.
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.