Comment intégrer des polices Web Google dans un fichier SVG?

48

J'écris un article sur mon site sur les avantages des nouvelles technologies Web, notamment HTML5, CSS3 et SVG, l'un des avantages de ce dernier étant la possibilité de sélectionner du texte dans ce qui est autrement une image.

Je suis nouveau dans les SVG et je viens de réaliser mon premier bon graphique dans Illustrator. Je l'ai incorporé dans une page avec le script GWF pour la police Ubuntu dans la balise. Il s’avère que la police Ubuntu s’affiche correctement en texte normal, mais pour que cette astuce fonctionne dans le SVG, le script Google doit être intégré au SVG lui-même. Comment puis-je faire ceci?

Jules
la source
1
Une remarque importante concernant les solutions basées sur @import: elles ne fonctionnent pas pour les images d’arrière-plan. Vous devez incorporer la police via base64 ou utiliser plutôt une balise image / object.
Mickey

Réponses:

39

Vous intégrez des polices dans CSS à l’aide du codage base64. Vous pouvez appliquer des styles similaires à CSS dans les documents SVG en utilisant un <style />élément. Donc, si vous avez une police WOFF, vous l’intègrerez comme ceci:

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

...sont les données de police codées en base64.

Vous pouvez en trouver des exemples en consultant les feuilles de style de Typekit. Je ne suis pas sûr que le type de mime font/woffsoit correct, car j'ai aussi vu des gens prétendre que ce devrait être le cas application/font-woff. Bien que font/woff, font/truetype, font/opentype, etc. semblent être plus populaire.

Vous pouvez également utiliser la version SVG de la police Web et incorporer le balisage de description de la police SVG dans votre document (bien que la prise en charge du navigateur soit encore très limitée, comme le note Luke dans les commentaires).

Cependant, vous devriez également pouvoir créer un lien vers une police externe conformément à la spécification SVG . Cela semblerait être la meilleure solution si vous avez plusieurs documents SVG référençant cette police.

Lèse majesté
la source
2
Le type MIME correct pour .woff est maintenant application/font-woff. stackoverflow.com/a/5142316/90674
sshow
3
En ce qui concerne "vous pouvez réellement prendre la version SVG de la police Web et incorporer le balisage de description de la police SVG dans votre document", vous devez savoir que "les polices SVG ne sont actuellement prises en charge que par Safari et le navigateur Android". Voir developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/SVG_fonts (également caniuse.com/#feat=svg-fonts )
Luke le
1
Ce fil de discussion a beaucoup aidé, mais la question est alors de savoir comment convertir une police en base64. Ce site transfonter.org a beaucoup aidé et permet de ne sélectionner qu'un sous-ensemble de la police à convertir, de manière à réduire la taille du fichier.
Fabien Snauwaert
Cette réponse m'a semblé tentante, mais au final, j'ai trouvé ces étapes plus faciles et je les ai donc partagées: graphicdesign.stackexchange.com/a/124900/45239
Ryan
Lorsque j'ouvre ce fichier svg dans Adobe Illustrator, les polices ne se chargent pas. De l'aide?
Aamir Nakhwa
13

Une <defs>section comme

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

travaux.

Leighman
la source
13
Dans les navigateurs Web actuels (février 2016), cela ne fonctionne que lors du chargement du fichier autonome SVG. Voir marians.github.io/test-webfonts-in-svg/test.svg pour un exemple. En ouvrant le même fichier SVG dans une page HTML, la police n'est pas chargée / rendue. Utilisez marians.github.io/test-webfonts-in-svg à titre d'exemple.
Marian
1
Les pages SVG et HTML autonomes semblent fonctionner de la même manière dans la version de Chrome 73.0.3683.103 (Build officiel) (64 bits).
Paul Grime
Il charge des polices lorsque j'ouvre svg sur le navigateur, mais lorsque j'ouvre le même fichier svg dans Adobe Illustrator, il ne charge pas les polices. De l'aide?
Aamir Nakhwa
3

Vous pouvez intégrer des polices Web Google dans votre SVG directement à l'aide de Nano . Il analyse automatiquement votre fichier SVG et n'intègre que de manière sélective les polices requises, garantissant ainsi que vos polices Ubuntu ont la même apparence sur tous les navigateurs modernes. Dans mon cas, il fallait que Roboto soit intégré à mon SVG:

entrez la description de l'image ici

Clause de non-responsabilité: je suis avec l’équipe derrière Nano, et nous aussi avons déjà fait face au même problème, nous avons donc décidé de nous gratter en construisant Nano. J'espère que c'est utile!

Edit: Voici une explication rapide sur ce qui se passe derrière la scène:

Pour intégrer des polices dans SVG, vous devez d’abord connaître les familles de polices utilisées. Ensuite, vous devez trouver ces fichiers de polices et les télécharger. Une fois téléchargé, vous devez convertir les caractères normaux, gras, italiques et gras italiques en codage base 64. Si vous le faites manuellement, il faut énormément de travail, sur un grand nombre de fichiers, pour savoir quel fichier est en gras et ceux qui ne le sont pas. Ensuite, vous devez copier toutes les 4 chaînes encodées en base 64 dans votre SVG.

C'est pourquoi nous construisons Nano et nous assurons qu'il scanne automatiquement SVG et insère uniquement les polices utilisées. Par exemple, si gras n'est pas utilisé ou s'il n'y a pas de texte, aucune police ne sera incorporée. Tout ce que vous avez à faire est de glisser-déposer votre fichier SVG dans Nano et tout fonctionne à merveille! Vous pouvez en apprendre plus ici: https://vecta.io/blog/making-svg-easier-to-use

Qin
la source
OK, super bien paraître. Malheureusement, le téléchargement sur un site Wordpress qui était plutôt heureux d'accepter le SVG auparavant ne sera plus "Désolé, ce type de fichier n'est pas autorisé pour des raisons de sécurité." - Que dois-je mettre en arrière pour que cela fonctionne?
Chris Pink
1

Cela simplifie peut-être trop, mais avez-vous envisagé de télécharger la police sous forme de fichier zip à partir de Google, puis de laisser Illustrator la convertir selon vos besoins en sortie de votre fichier SVG?

Ce n'est que théorique car je ne l'ai pas encore essayé, mais en théorie, cela semblerait fonctionner.

Gabearnold
la source
0

Ajouter ce qui suit après <desc>tag

<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>
muTheTechie
la source
pourquoi inclure autant de polices google? Ce n'est même pas la totalité ni la plus utilisée que je vois souvent et qui va ajouter au poids total du SVG.
MrMesees
Il charge des polices lorsque j'ouvre svg sur le navigateur, mais lorsque j'ouvre le même fichier svg dans Adobe Illustrator, il ne charge pas les polices. De l'aide?
Aamir Nakhwa
0

MISE À JOUR à ma réponse. Je préfère maintenant une réponse différente sur cette page, qui consiste à utiliser Nano: https://graphicdesign.stackexchange.com/a/121950/45239

En supposant que vous ayez téléchargé et installé une police Web sur votre système et créé un fichier SVG (peut-être en suivant les mêmes étapes que celles décrites ci-dessous, mais sans choisir "Police: Convertir en contours"), vous pouvez télécharger le fichier SVG vers Nano. et voyez l'option "Incorporer la police: Oui", et cliquez sur Télécharger.

Ma réponse précédente:

Si vous êtes prêt à sacrifier le texte et le référencement sélectionnables:

  1. Téléchargez la police Web.
  2. Installez-le localement.
  3. Ouvrez Adobe Illustrator
  4. Tapez votre texte.
  5. Fichier> Exporter> Exporter sous…
  6. Choisissez ".SVG"
  7. Choisissez ces paramètres:

    • Style: style en ligne
    • Police: Convertir en contours
    • Images: Conserve
    • ID d'objet: noms de couche
    • Décimal: 2
    • (activé) Minify
    • (activé) Responsive
  8. Vous pouvez éventuellement télécharger le svg résultant sur https://vecta.io/nano (cela a permis de réduire la taille de mon fichier de 8,2%)

Ryan
la source
Malheureusement, "convertir en contours" n’est pas une excellente option pour les textes de petite taille.
Chris Pink
@ChrisPink, oui vous avez raison!, Partagez-le si vous avez trouvé une autre option pour une taille de police réduite
Super Model
1
@SuperModel J'ai utilisé Nano avec un grand succès, les polices sélectionnant les styles dans le document joint. Mes premières tentatives ont échoué, mais avec l’aide généreuse de l’équipe Nano, nous avons trouvé une solution permettant de s’assurer que l’en-tête SVG reste intact.
Chris Pink