Sto sviluppando un programma che genera file svg in base alle scelte effettuate dall'utente. Una di queste scelte consiste nell'includere un altro file svg centrato su un punto specifico nel primo. Il secondo file ha una proporzione e una dimensione sconosciute, ma dovrebbe essere ridimensionato a una dimensione massima specifica come altezza o larghezza e dovrebbe essere centrato su un punto specifico. Il metodo che uso ora è avere un tag G che contenga il tag SVG dell'immagine inclusa ed eseguire una trasformazione sul tag G per ridimensionare e tradurre. Esiste un modo per eseguire la scala per ottenere una dimensione specifica senza conoscere la dimensione dell'immagine? E c'è un modo per avere le coordinate tradotte da applicare al centro dell'immagine invece dell'angolo in alto a sinistra? Sono molto nuovo per SVG, quindi potrebbe essere che sto andando su questo nel modo sbagliato. C'è forse un modo migliore per ottenere gli stessi risultati?Come centrare e ridimensionare i file SVG all'interno di un altro file SVG
risposta
Credo che si desidera avere prima l'altro file SVG nascosto, chiamata .getBBox() in JavaScript fare alcuni semplici calcoli, impostare i parametri appropriati, riapparire
ho capito quello che vuoi dire, o almeno io pensalo. Non c'è idea migliore nella mia mente di farlo invece di raggruppare. Per me <g>
è il modo migliore per manipolare con un frammento di documento SVG. Ma a mio avviso consideri l'elemento <rect>
come contenitore per i tuoi dati visivi. Forse quindi <g>
non sarebbe necessario, dipende dai requisiti di codifica.
Se avete bisogno di mettere solo l'immagine SVG semplice si può fare come:
<image id="yourSVGImage" xlink:href="yourImg.svg"
x="24px" y="50px" width="527px" height="328px"
preserveAspectRatio="XMinYMin meet"/>
Se esprimi "larghezza" e "altezza" in unità fisse (come pixel) si otterrà quello che ho' Sto pensando che hai bisogno. Anche "preserveAspectRatio" è lì per dare un'occhiata a questo attributo se ne hai bisogno.
Modifica: questa risposta ti richiede di conoscere la dimensione del file SVG interno. Il modo più disaccoppiato consiste nell'utilizzare il metodo getBBox() sul lato browser, probabilmente utilizzando visibility
o display
per impedire agli utenti di visualizzare la grafica non graduata. jsFiddle example viene aggiornato per utilizzare questo metodo.
Per il ridimensionamento, utilizzare viewBox attribute. Dalla documentazione del W3C:
Spesso è opportuno specificare che un determinato set di grafica si estenda per adattarsi a un particolare elemento contenitore. L'attributo 'viewBox' fornisce questa funzionalità.
Tutti gli elementi che stabiliscono una nuova finestra (vedere elements that establish viewports), ... hanno l'attributo 'viewBox'. Il valore dell'attributo 'viewBox' è un elenco di quattro numeri
<min-x>
,<min-y>
,<width>
e<height>
, ... che specificano un rettangolo nello spazio utente che deve essere mappato ai limiti della finestra definita dall'elemento specificato, tenendo conto account attribute ‘preserveAspectRatio’.Example ViewBox illustra l'uso dell'attributo 'viewBox' sull'elemento svg più esterno per specificare che il contenuto SVG deve estendersi per adattarsi ai limiti del viewport.
L'esempio sopra specifica preserveAspectRadio
come none
, così SVG incorporato estende per adattarsi SVG contenitore esattamente. Il valore predefinito di , che è xMidYMid meet
, dovrebbe soddisfare le tue esigenze. Questo attributo consente un controllo a grana fine su how to scale and position the enclosed graphics.
Dopo aver ridimensionato l'SVG interno con una dimensione nota con viewBox
, il centraggio dovrebbe essere una questione di semplice calcolo e l'utilizzo dell'attributo transform
correttamente. Ecco un esempio ridotta da http://jsfiddle.net/ento/hPuBY/:
<g transform="translate(125, 125)">
<!-- inner SVG is scaled to fit 150x150 -->
<svg width="150" height="150" viewBox="0 0 1500 1000">
<!-- coordinate system inside the SVG is 0x0 <> 1500x1000 -->
<rect width="1500" height="1000" />
<text x="750" y="550" font-size="150">
Embedded SVG
</text>
</svg>
</g>
- 1. Come posso ridimensionare un SVG?
- 2. Includi file SVG in SVG
- 3. Ridimensionamento di un file SVG in Java
- 4. Prestazioni in linea SVG vs file SVG
- 5. Chrome non sta caricando SVG File come immagine/svg + xml
- 6. Visualizza file SVG
- 7. Come aprire e visualizzare i file SVG nell'ambiente .NET?
- 8. IE10 colture SVG invece di ridimensionare
- 9. Come convertire i file SVG in altri formati di immagine
- 10. Salvataggio automatico di un file SVG?
- 11. SVG e CSS proprietà nello stesso file
- 12. Specificare un SVG come immagine di sfondo e ALSO come stile SVG in CSS?
- 13. Conversione dal file SVG al file XML
- 14. Come posso ridimensionare la larghezza SVG con i CSS?
- 15. Actionscript 3 - Importazione file SVG
- 16. Raphael JS - Usa un file SVG
- 17. Come centrare il suggerimento Bootstrap su un SVG?
- 18. Utilizzo di file SVG con libgdx
- 19. File SVG in Raphael, possono essere utilizzati?
- 20. Posso usare SVG Salamander per rasterizzare gli SVG nei file PNG? (e come posso farlo?)
- 21. Come centrare il testo ruotato di 90º in SVG
- 22. SVG trascinabile utilizzando JQuery e Jquery-svg
- 23. Come utilizzare i file .svg in una pagina Web?
- 24. Caricamento e visualizzazione svg
- 25. Come posso rendere * le parti * di un file SVG?
- 26. Esportare un file SVG dal DOM al file
- 27. Converti file SVG in file PNG di dimensioni diverse
- 28. Script per convertire più immagini SVG in un file di font SVG
- 29. Perché nidificare un elemento <svg> all'interno di un altro elemento <svg>?
- 30. Come ottenere riferimenti ad elementi SVG (figlio) nidificati in un altro elemento SVG (genitore) usando D3?
E 'un peccato non c'è una risposta per questa domanda, può essere che dovrebbe essere più specifico o essere rimarcato? – Parsa