如何在自己的服务器上托pipe谷歌网页字体?
我需要在Intranet应用程序上使用一些Google字体。 客户可能或可能没有互联网连接。 阅读许可条款,似乎它在法律上是允许的。
请记住,我的答案已经过时了一点。 下面还有其他更复杂的技术答案,例如:
- localfont
- neverpanic /谷歌的字体下载
- 谷歌-web字体辅助
所以不要让这是目前被接受的答案给你的印象,这仍然是最好的。
你现在也可以通过在谷歌/字体库上的github下载谷歌的整个字体集。 他们还提供了〜350MB的字体快照 。
您首先将您的字体select下载为压缩包,为您提供一大堆真正的字体。 把它们复制到公共的地方,你可以从你的css链接到某个地方。
在谷歌webfont下载页面,你会发现一个像这样的包含链接:
http://fonts.googleapis.com/css?family=Cantarell:400,700,400italic,700italic|Candal
它链接到通过一堆@font-face
定义来定义字体的CSS。
在浏览器中打开它,将其复制并粘贴到您自己的CSS中,然后修改url以包含正确的字体文件和格式types。
所以这:
@font-face { font-family: 'Cantarell'; font-style: normal; font-weight: 700; src: local('Cantarell Bold'), local('Cantarell-Bold'), url(http://themes.googleusercontent.com/static/fonts/cantarell/v3/Yir4ZDsCn4g1kWopdg-ehHhCUOGz7vYGh680lGh-uXM.woff) format('woff'); }
变成这样:
/* Your local CSS File */ @font-face { font-family: 'Cantarell'; font-style: normal; font-weight: 700; src: local('Cantarell Bold'), local('Cantarell-Bold'), url(../font/Cantarell-Bold.ttf) format('truetype'); }
正如你所看到的,这样在你自己的系统上托pipe字体的缺点是,你限制自己的真正的types格式,而谷歌webfont服务由访问设备确定哪些格式将被传输。
此外,我不得不添加一个.htaccess
文件到我的包含MIMEtypes的字体的目录,以避免在Chrome开发工具中popup错误。
对于这个解决scheme,只有真正的types是需要的,但是当你想要包含不同的字体时,定义更多并不会伤害,比如font-awesome
。
#.htaccess AddType application/vnd.ms-fontobject .eot AddType font/ttf .ttf AddType font/otf .otf AddType application/x-font-woff .woff
有一个工具localfont.com来帮助你下载所有的字体变种。 它也会生成相应的CSS来执行。
伟大的解决scheme是谷歌网页字体帮手 。
它允许您select多个字体变体,这可以节省大量的时间。
我写了一个bash脚本 ,它使用不同的用户代理获取Google服务器上的CSS文件,将不同的字体格式下载到本地目录,并写入包含它们的CSS文件。 请注意,该脚本需要Bash版本4.x.
有关脚本,请参阅https://neverpanic.de/blog/2014/03/19/downloading-google-web-fonts-for-local-hosting/ (我不在这里复制,因此我只需更新它一个地方,当我需要)。
CSS文件(来自包含URL)的内容取决于我从哪个浏览器查看它。 例如,使用Chrome浏览http://fonts.googleapis.com/css?family=Open+Sans时,该文件只包含WOFF链接。; 使用Internet Explorer(下面),它包括EOT和WOFF。 我把所有的链接粘贴到我的浏览器下载。
@font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 400; src: url(http://themes.googleusercontent.com/static/fonts/opensans/v6/cJZKeOuBrn4kERxqtaUH3fY6323mHUZFJMgTvxaG2iE.eot); src: local('Open Sans'), local('OpenSans'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/cJZKeOuBrn4kERxqtaUH3fY6323mHUZFJMgTvxaG2iE.eot) format('embedded-opentype'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff) format('woff'); }
当您使用自己的networking字体时,您需要正确链接到每种字体types ,处理传统的浏览器错误等。当您使用Google Web字体(由Google托pipe)时,Google会自动链接到该浏览器的正确字体types。
只要您坚持字体许可证的条款(通常是OFL),就可以在法律上允许。
您需要一组网页字体格式,而Font Squirrel Webfont Generator可以生成这些字体 。
但是OFL要求字体在被修改的时候被重命名,并且使用生成器意味着修改它们。
我有一个用PHP编写的脚本,类似于@ ownpanic的脚本,它自动从Google下载CSS和字体( 包括暗示的和无形的 )。 然后,它将根据用户代理从您自己的服务器提供正确的CSS和字体。 它保留自己的caching,所以用户代理的字体和CSS只能下载一次。
目前还处于早期阶段,但可以在这里find: DaAwesomeP / php-offline-fonts
我在一个咕task任务中使用了grunt-local-googlefont 。
module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), "local-googlefont" : { "opensans" : { "options" : { "family" : "Open Sans", "sizes" : [ 300, 400, 600 ], "userAgents" : [ "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)", //download eot "Mozilla/5.0 (Linux; U; Android 4.1.2; nl-nl; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", //download ttf "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1944.0 Safari/537.36" //download woff and woff2 ], "cssDestination" : "build/fonts/css", "fontDestination" : "build/fonts", "styleSheetExtension" : "css", "fontDestinationCssPrefix" : "fonts" } } } }); grunt.loadNpmTasks('grunt-local-googlefont'); };
然后,检索它们:
grunt local-googlefont:opensans
请注意,我正在使用原始分支,在检索名称中带有空格的字体时效果更好。
实际上,您可以直接从Google下载所有字体格式变体,并将它们包含在您的css中,以便从您的服务器提供。 这样,您就不必担心Google跟踪您网站的用户。 然而,不利的一面可能会降低你的服务速度。 字体对资源要求很高。 我还没有在这个问题上做任何testing,并怀疑是否有人有类似的想法。
我的解决scheme是从谷歌网页字体下载TTF文件,然后使用onlinefontconverter.com 。
除了k0pernicus,我想build议最好的本地服务 。 这也是一个bash(v4)脚本,使networking服务运营商能够从他们自己的networking服务器下载和提供Googlenetworking字体。 但除了另一个bash脚本之外,它还允许用户完全自动化(通过cron等)提供最新的字体文件和css文件。
我做了一个小小的PHP脚本,以获得从谷歌字体CSS导入URL,如下载链接: https : //fonts.googleapis.com/css?family = Roboto : 400,700| Slabo+27px|Lato: 400,300italic,900italic
你可以在这里使用这个工具: http : //nikoskip.me/gfonts.php
例如,如果你使用上面的导入URL,你会得到这个:
如果你想在你自己的服务器上托pipe所有的字体(或者其中的一些),你可以从这个repo下载字体,并按照你的需要使用它: https : //github.com/praisedpk/Local-Google-Fonts
有一个非常简单的脚本,用普通的Java编写,从Google Web Font链接下载所有字体(支持多种字体)。 它还下载CSS文件并将其调整为本地文件。 用户代理可以适应也得到其他文件,而不仅仅是WOFF2。 请参阅https://github.com/ssc-hrep3/google-font-download
生成的文件可以很容易地添加到构build过程中(例如像vue-webpack
这样的webpack构build)。