当前位置: 首页 > 知识库问答 >
问题:

将网页字体转换和渲染为 base64 - 保持原始外观

严亮
2023-03-14

我想推迟我的网站上的字体加载,灵感来自粉碎杂志的延迟字体加载逻辑。

主要部分是将字体转换为base 64并准备您的CSS文件。到目前为止我的步骤:

    < li >在Google Web字体上选择字体并下载。 < li >使用Font Squirrel Webfont Generator将下载的TTF文件转换为带有base64嵌入式WOFF字体的CSS文件(专家选项-

Open Sans Bold 的 CSS 代码段:

@font-face {
  font-family: 'Open Sans';
  src: url(data:application/x-font-woff;charset=utf-8;base64,<base64_encoded>) format('woff');
  font-weight: 700;
  font-style: normal;
}

特别是注意重音和绝对可怕的字母a。其他字体系列和变体看起来也非常明显不同(大小和形状扭曲等)。

所以问题是:你如何正确地将来自Google网页字体(或其他来源)的TTF文件编码为base64格式,并以结果与原始文件相同的方式使用它?

共有2个答案

韦业
2023-03-14

使用此代码片段直接在浏览器中对您的字体进行Base64编码(独立于操作系统,无需安装任何东西)

function base64convert (files) {
  console.clear()
  const reader = new FileReader()
  reader.onload = (e) => {
    console.log(e.target.result)
  }
  reader.readAsDataURL(files[0])
}
<input type="file" onchange="base64convert(this.files)">
萧永望
2023-03-14

在字体松鼠专家选项中,确保将“TrueType提示”选项设置为“保持现有”。其他任何一个选项都会导致TrueType指令(提示)被修改,从而影响字体的呈现。

或者,如果您对直接从GWF渲染字体感到满意,则可以自己获取该文件并进行base64编码。在 OS X 或 Linux 中,使用终端/外壳中的内置 base64 命令:

$ base64 myfont.ttf

对于Windows,您需要下载一个程序以base64编码(有几种免费/开源工具可用)。复制该文件的内容,然后在CSS中使用:

@font-face {
    font-family: 'myfont';
    src: url(data:font/truetype;charset=utf-8;base64,<<copied base64 string>>) format('truetype');
    font-weight: normal;
    font-style: normal;
}

(请注意,您可能需要对各种@font-face信息进行一些调整,以匹配特定的字体数据;这只是一个示例模板。)

 类似资料:
  • 问题内容: 我想使用Express 3 呈现原始页面,如下所示: 这是我配置服务器以呈现原始HTML页面的方式(此过时的问题启发了这一点): 不幸的是,使用此配置,页面将挂起并且永远无法正确呈现。我做错了什么?如何在没有精美的渲染引擎(如Jade和EJS)的情况下使用Express3渲染原始HTLM? 问题答案: 如果您实际上不需要将数据注入模板,则express中最简单的解决方案是使用静态文件服

  • 我正在收听现场电话,并能够获得原始的PCM字节。我还可以通过java的音频api来收听这些字节。这些都在一个小程序上工作。 现在,我希望能够将电话呼叫的原始PCM字节转换为WAV字节,以便直接将其写入ServletOutputStream。这将允许浏览器实际监听电话。 有人知道我如何能够将一些原始PCM字节[]转换为WAV字节[]吗? 我看到的例子都与将一个文件转换为另一个文件有关。 java p

  • 问题内容: 我一直在尝试增强我用Java编写的GUI系统,以使用亚 像素抗锯齿功能,并且除两个剩余的 异常现象之外,都已经取得了成功。这是我的一个后续从几个星期的其他问题 之前。 第一个问题是将渲染提示KEY_ANTIALIASING设置为 VALUE_ANTIALIAS_ON会导致将KEY_TEXT_ANTIALIASING设置 为LCD(子像素)AA值时被忽略。谁能对此有所启发?目前,我 被迫

  • 问题内容: 我需要将base64编码字符串转换为ArrayBuffer。base64字符串是用户输入的字符串,它们将通过电子邮件进行复制和粘贴,因此在加载页面时它们不存在。我想在javascript中做到这一点,如果可能的话,不向服务器进行ajax调用。 这看起来不错,但我不知道如何使用代码。 有没有简单的方法(也许是本地方法)进行转换?谢谢 问题答案: 尝试这个:

  • 问题内容: 我将 图片获取 为base64字符串( ) ,下面是将转换为图片的函数, 现在,如果图像为png,则png库将创建图像,而jpg库将引发错误,反之亦然。 问题是当我上传png时效果很好,但是当我 上传jpg文件时 返回此错误 无效的JPEG格式:缺少SOI标记 输入为: 这可能有帮助 问题答案: 您将您的传递给,这开始消耗阅读器,只是发现输入不是有效的PNG,因此返回错误。 然后,将部

  • 有一种方法可以将输入流转换为字符串,并将其编码为base64,对吗? 在我的函数中,我得到了InputStream参数,需要将其插入到Oracle数据库表的BLOB字段中。 有办法做到吗? (我的数据库对象包含用于保存图像的字符串字段,但我找不到任何方法将InputStream转换为base 64格式的字符串。)