Come posso incorporare Google Web Fonts in un SVG?


48

Sto scrivendo un articolo sul mio sito sui vantaggi delle nuove tecnologie web, tra cui HTML5, CSS3 e SVG, uno dei vantaggi di quest'ultimo è la possibilità di selezionare il testo in ciò che altrimenti sarebbe effettivamente un'immagine.

Sono nuovo di SVG e ho appena realizzato la mia prima grafica decente in Illustrator. L'ho incorporato in una pagina con lo script GWF per il carattere Ubuntu nel tag. A quanto pare, il carattere Ubuntu viene visualizzato correttamente nel testo normale, ma affinché questo trucco funzioni nell'SVG, lo script di Google deve essere incorporato nell'SVG stesso. Come posso fare questo?


1
Una nota importante per quanto riguarda le soluzioni basate su @import: non funzionano per le immagini di sfondo. È necessario incorporare il carattere tramite base64 o utilizzare invece un tag immagine / oggetto.
Topolino,

Risposte:


39

Incorporate i caratteri nei CSS usando la codifica base64. È possibile applicare stili nei documenti SVG simili ai CSS utilizzando un <style />elemento. Quindi se hai un carattere WOFF, lo incorporeresti in questo modo:

<style>
@font-face {
    font-family: "Sample font";
    src: url("data:application/font-woff;charset=utf-8;base64,...");
}
</style>

Dove ...sono i dati dei caratteri codificati base64.

Puoi trovare esempi di ciò guardando i fogli di stile di Typekit. Non sono sicuro che il tipo mime font/woffsia corretto, poiché ho anche visto le persone affermare che dovrebbe essere application/font-woff. Anche se font/woff, font/truetype, font/opentype, ecc sembrano essere più popolare.

In alternativa, potresti effettivamente prendere la versione SVG del font web e incorporare il markup di descrizione del font SVG all'interno del tuo documento (anche se il supporto del browser è ancora molto limitato come nota Luke nei commenti).

Tuttavia, dovresti anche essere in grado di collegarti a un carattere esterno secondo la specifica SVG . Sembrerebbe essere la soluzione migliore se hai più documenti SVG che fanno riferimento a quel carattere.


2
Il tipo MIME corretto per .woff è ora application/font-woff. stackoverflow.com/a/5142316/90674
sshow

3
Per quanto riguarda "potresti effettivamente prendere la versione SVG del font web e incorporare il markup di descrizione del font SVG all'interno del tuo documento", dovresti essere consapevole che "i font SVG sono attualmente supportati solo in Safari e Browser Android". Vedi developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/SVG_fonts (anche caniuse.com/#feat=svg-fonts )
Luca

1
Questo thread ha aiutato molto, ma la domanda è diventata come convertire un font in base64. Questo sito transfonter.org ha aiutato molto e consente di selezionare solo un sottoinsieme del carattere da convertire, in modo da ridurre le dimensioni del file.
Fabien Snauwaert,

Questa risposta sembrava allettante, ma alla fine ho trovato questi passaggi più facili, quindi li ho condivisi: graphicdesign.stackexchange.com/a/124900/45239
Ryan

Quando apro quella svg in Adobe Illustrator, i caratteri non vengono caricati. Qualsiasi aiuto?
Aamir Nakhwa,

13

Una <defs>sezione come

<defs>
  <style type="text/css">@import url(http://fonts.googleapis.com/css?family=Indie+Flower);</style>
</defs>

lavori.


13
Negli attuali browser Web (febbraio 2016), funziona solo quando si carica il file SVG autonomo. Vedi marians.github.io/test-webfonts-in-svg/test.svg per un esempio. Aprendo lo stesso SVG all'interno di una pagina HTML, il carattere non viene caricato / renderizzato. Usa marians.github.io/test-webfonts-in-svg come esempio.
Marian,

1
La pagina SVG e HTML stand-alone sembrano funzionare allo stesso modo nella versione 73.0.3683.103 di Chrome (build ufficiale) (64-bit).
Paul Grime,

Sta caricando i caratteri quando apro svg sul browser, ma quando apro lo stesso file svg in Adobe Illustrator, non carica i caratteri. Qualsiasi aiuto?
Aamir Nakhwa,

3

Puoi incorporare Google Web Fonts nel tuo SVG direttamente utilizzando Nano . Esegue automaticamente la scansione del tuo SVG e incorpora selettivamente solo i caratteri richiesti, assicurando che i tuoi caratteri Ubuntu abbiano lo stesso aspetto su tutti i browser moderni. Nel mio caso, avevo bisogno che Roboto fosse incorporato nel mio SVG:

inserisci qui la descrizione dell'immagine

Disclaimer: sono con il team dietro Nano e anche noi abbiamo affrontato lo stesso problema in precedenza, quindi abbiamo deciso di grattarci il prurito costruendo Nano. Spero sia utile!

Modifica: ecco una breve spiegazione di ciò che accade dietro la scena:

Per incorporare i caratteri in SVG, devi prima sapere quali famiglie di caratteri vengono utilizzate. Quindi è necessario trovare questi file dei caratteri e scaricarli. Una volta scaricato, devi convertire il corsivo normale, grassetto, corsivo e grassetto in codifica base 64. Se lo stai facendo manualmente, è una grande quantità di lavoro, su un gran numero di file, sapere quale file utilizza grassetto e quali no. Quindi devi copiare tutte e 4 le stringhe codificate in base 64 nel tuo SVG.

Ecco perché costruiamo Nano e ci assicuriamo che scansiona automaticamente SVG e inserisca solo i caratteri utilizzati. Ad esempio, se non viene utilizzato il grassetto o se non esiste alcun testo, non verranno incorporati caratteri. Tutto quello che devi fare è trascinare e rilasciare il tuo SVG in Nano e funziona come un incantesimo! Puoi saperne di più qui: https://vecta.io/blog/making-svg-easier-to-use


OK, bello sembra buono. Purtroppo il caricamento su un sito Wordpress che era abbastanza felice di accettare SVG prima d'ora non "Ci dispiace, questo tipo di file non è consentito per motivi di sicurezza". - cosa devo rimettere per farlo funzionare?
Chris Pink,

1

Ciò può essere eccessivamente semplificato, ma hai preso in considerazione il download del font come file zip da Google e poi lasciare che Illustrator lo converta in base alle tue necessità nel tuo file in formato SVG?

Questo è solo teorico in quanto non l'ho ancora provato, ma in teoria sembrerebbe funzionare.


0

Aggiungi il seguente <desc>tag dopo

<defs>
<style type="text/css">@import url('http://fonts.googleapis.com/css?family=Lobster|Fontdiner+Swanky|Crafty+Girls|Pacifico|Satisfy|Gloria+Hallelujah|Bangers|Audiowide|Sacramento');</style>
</defs>

perché includere così tanti caratteri Google? Non sono nemmeno tutti loro o i più usati che vedo molto e aumenteranno il peso complessivo di SVG.
MrMesees

Sta caricando i caratteri quando apro svg sul browser, ma quando apro lo stesso file svg in Adobe Illustrator, non carica i caratteri. Qualsiasi aiuto?
Aamir Nakhwa,

0

AGGIORNAMENTO alla mia risposta. Ora preferisco una risposta diversa su questa pagina, che è usare Nano: https://graphicdesign.stackexchange.com/a/121950/45239

Supponendo che tu abbia scaricato e installato un font web sul tuo sistema e abbia creato un SVG (magari usando molti degli stessi passaggi descritti di seguito ma non scegliendo "Font: Converti in contorni"), puoi caricare SVG su Nano e vedi l'opzione "Incorpora carattere: Sì" e fai clic su Scarica.

La mia risposta precedente:

Se sei disposto a sacrificare testo e SEO selezionabili:

  1. Scarica il font web.
  2. Installalo localmente.
  3. Apri Adobe Illustrator
  4. Digita il testo.
  5. File> Esporta> Esporta come ...
  6. Scegli ".SVG"
  7. Scegli queste impostazioni:

    • Styling: stile in linea
    • Carattere: Converti in contorni
    • Immagini: preservare
    • ID oggetto: nomi layer
    • Decimale: 2
    • (abilitato) Minimizza
    • (abilitato) Reattivo
  8. Opzionalmente carica lo svg risultante su https://vecta.io/nano (È stato in grado di ridurre le dimensioni del mio file dell'8,2%)


Sfortunatamente, "converti in contorni" non è un'ottima opzione per le dimensioni di testo più piccole.
Chris Pink,

@ChrisPink, sì hai ragione!, Per favore condividi se hai trovato qualche altra opzione per caratteri piccoli
Super Model

1
@SuperModel Ho usato Nano con grande successo, con i font che hanno preso gli stili dal documento allegato. I miei primi tentativi fallirono, ma con il gentile aiuto del team Nano ci siamo resi conto che si trattava di assicurarsi che l'intestazione SVG rimanesse intatta.
Chris Pink,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.