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.