The My Opera forums have been replaced with forums.opera.com. Please head over there to discuss Opera's products and features
See the new ForumsYou need to be logged in to post in the forums. If you do not have an account, please sign up first.
Visualisation d'une image SVG par Opera
Bonjour,Je me demande comment inclure une image SVG dans une page HTML et changer l'échelle de l'image
Si je fais:
<object data="circle1.svg" type="image/svg+xml"></object>
Ok, ça marche, mais maintenant si je veux dilater/contracter cette image j'essaie:
<object data="circle1.svg" width="200" height="200" type="image/svg+xml"></object>
Simplement ça ne change pas l'échelle de l'image, mais ça tronque ou étend l'image.
Tout début de réponse est le bien venu...
26. November 2011, 03:33:34 (edited)
Bon je n'y connais pas grand chose mais je me demande si tu ne dois pas réaliser plusieurs echelles par SVG
32x32 + 64x64 + 128x128 + 256x256 etc..etc... Ou juste l'echelle que tu veux vraiment affiché mais en cas de zoom de ta page je pense que ta SVG ne zoomera pas ?
ensuite mettre le code HTML adéquat ??? mais la je suis largué désolé!
Pour insérer une image, il faut utiliser la balise img. Normalement ça devrait fonctionner avec du SVG aussi et là, là taille que tu spécifiras, sera la taille du contenu de la balise à savoir une image.
Ergonome / Usability expert
http://nickko.be
http://www.usability.fr/
Plus d'info, des réponses plus rapides : http://www.opera-fr.com/forum
La fameuse page du profile vierge : http://www.opera-fr.com/wiki/wiki?QueFaireFaceAUnProbleme
28. November 2011, 12:16:29 (edited)
Si tu veux faire une page web qui passe bien partout c'est pas en utilisant des plugins qui tu vas y arriver car il faut que ceux-ci soient installé en plus du navigateur, si pour Flash, tu ne prends pas trop de risque, pour un truc aussi exotique que le SVG, c'est pas gagné.
Non, si tu veux que ta page soit universelle, tu transformes ton SVG en PNG par exemple.
Edit (j'ai cherché un peu plus) :
Ensuite, W3school, c'est W3school, ils disent quoi sur Alsacréation par exemple ?
Après une petite recherche il semblerait que la meilleure méthode soit d'inclure le code SVG (XML) directement dans la page XHTML (XML aussi), biensur, il faut que ta page soit en XHTML et pas en HTML mais la conversion n'est pas compliquée.
Ergonome / Usability expert
http://nickko.be
http://www.usability.fr/
Plus d'info, des réponses plus rapides : http://www.opera-fr.com/forum
La fameuse page du profile vierge : http://www.opera-fr.com/wiki/wiki?QueFaireFaceAUnProbleme
En ce qui concerne l'utilisation de <img... /> à la place de <object> ça passe avec Firefox, mais pas avec Opera, mais Firefox traite un attribut width sur <img> comme un rogne et non comme un changement d'échelle.
Enfin bref pour reprendre le terme impropre de "portable" --- je voulais dire que ça donne sensiblement le même résultat quel que soit le navigateur --- j'en conclus que
- <object ...> est la meilleure méthode
- impossible de faire un changement d'échelle.
Ensuite, ce n'est pas tant SVG qui est exotique, c'est le plugin qui permet de l'afficher. Tandis qu'aujourd'hui, tous les navigateurs récents le prennent plus ou moins en charge, même IE. D'où l'intéret de ne pas passer par le plugin pour l'afficher.
Autre idée pour rester ds le vectoriel, convrtir ton SVG en Flash, ça doit être possible, le plugin flash est plus rependu que le plugin SVG et lorsqu'on le redimensionne, son contenu suit.
Ergonome / Usability expert
http://nickko.be
http://www.usability.fr/
Plus d'info, des réponses plus rapides : http://www.opera-fr.com/forum
La fameuse page du profile vierge : http://www.opera-fr.com/wiki/wiki?QueFaireFaceAUnProbleme
Voici la page en question, suivie du fichier circle1.svg:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
lang="en" xml:lang="en">
<head>
<title>temp</title>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
<meta name="generator" content="Org-mode"/>
<meta name="generated" content="2011-11-24 21:21:49 "/>
<meta name="author" content="Vincent Belaïche"/>
<meta name="description" content=""/>
<meta name="keywords" content=""/>
<style type="text/css">
<
Et c'est normal puisque le code du haut comme je te l'ai dis, fonctionne, je l'ai pris sur une page de my.opera.
Bien sûr, les images liés par des fichiers sont vide parce que je n'ai pas pris la peine de créer le fichier SVG.
Edit :
Petite différence entre nos 2 essaies, tu as mis la mauvaise extension à ton fichier, l'extension d'un fichier XHTML et .xhtml
Dans Opera 12 ça ne fait aucune différence, dans Opera 11, seul le fichier avec l'extension .xhtml permet de mélanger xhtml et svg.
Ergonome / Usability expert
http://nickko.be
http://www.usability.fr/
Plus d'info, des réponses plus rapides : http://www.opera-fr.com/forum
La fameuse page du profile vierge : http://www.opera-fr.com/wiki/wiki?QueFaireFaceAUnProbleme
* l'attribut `transform="scale(0.5,0.5)" ' est sans effet
* une balise `image' dans un SVG est sans effet (carré blanc)
Essaie donc moi ça (en nommant le fichier qqchose.xhtml):
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>temp.XHTML</title>
</head>
<body>
<table border="1">
<tr>
Voici les codes des fichiers SVG que j'utilise, dans aucun des cas je n'arrive à contracter
l'image…
<table border="1">
<tr>
<th>circle1-scaled.svg</th>
<th>circle1.svg</th>
</tr>
<tr>
<td>
<pre><?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg" version="1.1">
<image tranform="scale(0.5,0.5)"
xlink:href="circle1.svg" />
</svg></pre>
</td>
<td><pre>
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="black"
stroke-width="2" fill="red" />
</svg></pre>
</td>
</tr>
<tr><th>circle1-scaledinside.svg</th><td></td></tr>
<tr><td><pre><svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<g tranform="scale(0.5,0.5)" >
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</g>
</svg>
</pre></td><td></td></tr>
</table>
</tr>
<tr>
<td>
Code incorporé: (avec Opéra on voit qq chose à condition d'avoir un fichier nommé en *.XHTML).
<table border="1">
<colgroup>
<col width="200" style="background-color:yellow" />
<col width="200" style="background-color:green" />
</colgroup>
<tr><th>
Même contenu que <file>circle1-scaledinside.svg</file>
</th>
<th>
Même contenu que <file>circle1.svg</file>
</th></tr>
<tr><td>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<g tranform="scale(0.5,0.5)" >
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</g>
</svg>
</td><td>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</svg>
</td></tr></table>
</td>
</tr><tr><td> Code inclus avec un balise img: on voit qqchose avec Firefox et Opéra, l'attribut width
entraîne un rognage.
<table border="1">
<colgroup>
<col width="200" style="background-color:yellow" />
<col width="200" style="background-color:green" />
</colgroup>
<tr><th><img width="75" src="circle1.svg" /></th>
<th><img src="circle1.svg" /></th></tr>
<tr><td>
<img width="75" src="circle1.svg" />
</td><td>
<img src="circle1.svg" />
</td></tr></table>
</td></tr>
<tr><td> Code "circle1-scaled.svg" inclus avec un balise img: On ne voit rien pour
"circle1-scaled.svg" ni avec Firefox ni avec Opéra
<table border="1">
<colgroup>
<col width="200" style="background-color:yellow" />
<col width="200" style="background-color:green" />
</colgroup>
<tr><th><img src="circle1-scaled.svg" /></th>
<th><img src="circle1.svg" /></th></tr>
<tr><td>
<img src="circle1-scaled.svg" />
</td><td>
<img src="circle1.svg" />
</td></tr></table>
</td></tr>
</table>
</body>
</html>

Sinon, petit conseil, lorsque tu as de grand code source, il vaut mieux passer par un service de pastbin, il en existe même un pour Opera. Ainsi; la discussion peut garder sa fluidité.
Autre petite chose sans rapport avec ton problème, Opera ne prend pas d'accent, en fait même si en français on dit souvent Opéra la bonne prononciation serait plutôt op'ra.
Ergonome / Usability expert
http://nickko.be
http://www.usability.fr/
Plus d'info, des réponses plus rapides : http://www.opera-fr.com/forum
La fameuse page du profile vierge : http://www.opera-fr.com/wiki/wiki?QueFaireFaceAUnProbleme
6. December 2011, 05:48:11 (edited)
Originally posted by Nickko:
Je n'ai pas le contenu de tes fichiers SVG, si pour circle1, j'ai une petite idée pour les autres c'est plus flou.
Ben si tu les as
, ils sont affichés en haut de la page dont j'ai mis le code en ligne dans le message horodaté du 4. December 2011, 06:47:04.Vincent.
PS: Sinon, pour revenir au sujet de la discussion --- il paraît qu'on est en plein dedans
--- depuis le début du fil je n'ai pas vu une seule fois le cercle contracté, c'est un comble pour un format dont le sigle signifie «Scalable Vector Graphic ». Il semble que la contraction/dilatation soit sans effet et que la taille du graphique est ajustée automatiquement. Tu confirmes ?Maintenant que ça s'affiche, il faut trouver comment maitriser la taille de la bestiole.
Originally posted by vincentb1:
Il semble que la contraction/dilatation soit sans effet et que la taille du graphique est ajustée automatiquement. Tu confirmes ?
Je confirme qu'on a pas encore vu ça. Maintenant ça doit bien être possible, on va désormais se pencher sur ce problème.
1° idée : transform="scale(2)" ça devrait diminuer de moitié ton image.
2° idée j'ai vaguement vu passer l'attribut viewbox, je pense que ça peut avoir un rapport avec ton problème.
Ergonome / Usability expert
http://nickko.be
http://www.usability.fr/
Plus d'info, des réponses plus rapides : http://www.opera-fr.com/forum
La fameuse page du profile vierge : http://www.opera-fr.com/wiki/wiki?QueFaireFaceAUnProbleme
Le code suivant s'il est incorporé dans du XHTML va bien grossir l'image 3 fois:
<svg width="420px" height="270px" viewbox="0 0 420 270" xmlns="http://www.w3.org/2000/svg" version="1.1"> <g transform="scale(3)"> <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" /> </g> </svg>
Toutefois:
- viewbox n'a pas l'air de servir à grand chose, ça fait la même chose sans.
- comment calculer la largeur et la hauteur de façon simple, analyser tout le code SVG ?
- le code suivant où on passe un fichier, ne le fait pas
<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" version="1.1" width="420px" height="270px" viewbox="0 0 420 270" > <image width="420" height="270" transform="scale(3)" xlink:href="circle1.svg"/> </svg>
Ce n'est pas mieux si j'ajoute
xlink:type="image/svg+xml"
dans les attributs de <image>.
Vincent.
Voilà un code qui marche chez moi quand il est incorporé à une page XHTML:
<svg width="240px" height="270px" viewBox="180 0 240 270" xmlns="http://www.w3.org/2000/svg" version="1.1"> <g transform="scale(3)"> <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" /> </g> </svg>
Ergonome / Usability expert
http://nickko.be
http://www.usability.fr/
Plus d'info, des réponses plus rapides : http://www.opera-fr.com/forum
La fameuse page du profile vierge : http://www.opera-fr.com/wiki/wiki?QueFaireFaceAUnProbleme
En fait ce que je cherche à faire c'est à dilater/contracter l'image en connaissant soit la hauteur finale --- et en gardant les proportions --- soit la largeur finale --- et en gardant les proportions ---, soit les deux, et dans ce cas les proportions pourraient être modifiées.
C'est possible avec les attributs width, height, et viewBox, ainsi qu'un petit <g transform="scale(...)"> ... </g>, mais, le problème c'est qu'il faut au préalable déterminer les xmin, xmax, ymin et ymax de l'image...
Je me demande s'il y a des scripts qui font ça simplement. J'ai regardé du côté de Perl, http://search.cpan.org/~peterw/SVG-Parser-1.03/lib/SVG/Parser.pm#METHODS, il y a un truc pour analyser un fichier SVG, et après on a un objet SVG en Perl, mais je n'ai pas trouvé de méthode pour extraire les xmin, xmax, ymin, ymax...
Il y a un deuxième problème, pour l'instant je n'ai réussi à faire la dilatation/contraction qu'en incorporant toute l'image au fichier XHTML, je pense qu'il est plus judicieux d'avoir un fichier SVG séparé auquel on ne touche pas, mais là je ne suis pas arrivé à le faire...
Vincent.
PS: Tu te demandes peut-être pourquoi je cherche à faire tout ça, j'écris des doc en Texinfo, Texinfo possède un compilateur en Perl qui permet de convertir le code Texinfo en HTML et un compilateur en TeX qui permet de convertir le même document en Postscript. Ce compilateur pourrait être modifié facilement pour produire du XHTML et inclure du SVG --- Texinfo ne permet pas actuellement d'inclure d'image vectorielle pour la sortie (X)HTML, mais seulement pour une sortie postscript. Le petit problème qui reste c'est pour ces dilatations/contractions.
SI tu avance un peu, je t'invite à me faire part de l'évolution peut-être pourrais-je encore être utile.
Ergonome / Usability expert
http://nickko.be
http://www.usability.fr/
Plus d'info, des réponses plus rapides : http://www.opera-fr.com/forum
La fameuse page du profile vierge : http://www.opera-fr.com/wiki/wiki?QueFaireFaceAUnProbleme