【小程序支持】微信小程序加载第三方字体

一、加载本地字体

做小程序项目时,有时为了提升页面展示效果,会引入一些第三方字体,引入方式如下代码片段

/*直接在app.css引入 */
@font-face {
    font-family: "alifont"; // 是你封装的名字
    src: url('./static/css/subset-AlibabaPuHuiTiR.ttf') format('truetype'); // 你字体包的位置
}

而常规字体文件比较大(例如以上阿里巴巴普惠字体–Alibaba-PuHuiTi-Regular.otf,字体文件大小6.9M),小程序的包大小又有2M的限制,引入本地字体会超包。

二、加载外部字体

@font-face {
    font-family:'alifont';
    src:url('https://www.jiandatech.com/test/vape/Alibaba-PuHuiTi-Regular.otf') format('opentype');
}

或者

wx.loadFontFace({
    family: 'alifont',
    source: 'url("https://www.jiandatech.com/test/vape/Alibaba-PuHuiTi-Regular.otf")',
    success: function (e) {
        console.log(e, '动态加载字体成功')
    },
    fail: function (e) {
        console.log(e, '动态加载字体失败')
    }
})

缺点:加载会很慢,会有明显的默认字体切换到外部字体的过程,体验较差,特别是字体文件越大,加载的速度越慢,有些小程序页面甚至无法加载成功。

三、简化字体文件后再本地引入

针对1和2的问题,我们可以对字体进行抽取,抽出页面中需要用到的字,文字抽取工具Transfonter,如下图所示操作
网上教程常介绍的方法,到transfonter上传文件,formats只勾选ttf就行。可以将字体转换成base64的face-font,复制到wxss里面就可以使用。但是缺点也很明显,小程序最大体积限制只能2m,随便一个中文字体就超过了。
在这里插入图片描述

抽取后字体文件就从原来的6.9M变成了9k,然后就可以采用本地文件引入的方式加载第三方字体,有比较好的交互体验。

附:
@font-face的format属性

  • format :字体的格式,主要用于浏览器识别,一般有以下几种——truetype,opentype,truetype-aat,embedded-opentype,avg等。

对于@font-face而言,兼容性问题就是各浏览器所能识别的字体格式不尽相同。

  • TrueType格式(.ttf)
    Windows和Mac上常见的字体格式,是一种原始格式,因此它并没有为网页进行优化处理。

    浏览器支持:IE9+,FireFox3.5+,Chrome4.0+,Safari3+,Opera10+,IOS Mobile Safari4.2+

  • OpenType格式(.otf)
    以TrueType为基础,也是一种原始格式,但提供更多的功能。

    浏览器支持:FireFox3.5+,Chrome4.0+,Safari3.1+,Opera10.0+,IOS Mobile Safari4.2+

  • Web Open Font格式(.woff)
    针对网页进行特殊优化,因此是Web字体中最佳格式,它是一个开放的TrueType/OpenType的压缩版,同时支持元数据包的分离。

    浏览器支持:IE9+, FireFox3.5+, Chrome6+, Safari3.6+,Opera11.1+

  • Embedded Open Type格式(.eot)
    IE专用字体格式,可以从TrueType格式创建此格式字体。

    浏览器支持:IE4+

  • SVG格式(.svg)
    基于SVG字体渲染的格式。

    浏览器支持:Chrome4+, Safari3.1+, Opera10.0+, IOS Mobile Safari3.2+

为解决兼容性问题,一般引入字体如下代码片段所示:

@font-face {
    font-family: 'YourWebFontName';
    src: url('YourWebFontName.eot'); /* IE9 Compat Modes */
    src: url('YourWebFontName.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
         url('YourWebFontName.woff') format('woff'), /* Modern Browsers */
         url('YourWebFontName.ttf') format('truetype'), /* Safari, Android, iOS */
         url('YourWebFontName.svg#YourWebFontName') format('svg'); /* Legacy iOS */
}
### 关于ArcGIS License Server无法启动的解决方案 当遇到ArcGIS License Server无法启动的情况,可以从以下几个方面排查并解决问题: #### 1. **检查网络配置** 确保License Server所在的计算机能够被其他客户端正常访问。如果是在局域网环境中部署了ArcGIS Server Local,则需要确认该环境下的网络设置是否允许远程连接AO组件[^1]。 #### 2. **验证服务状态** 检查ArcGIS Server Object Manager (SOM) 的运行情况。通常情况下,在Host SOM机器上需将此服务更改为由本地系统账户登录,并重启相关服务来恢复其正常工作流程[^2]。 #### 3. **审查日志文件** 查看ArcGIS License Manager的日志记录,寻找任何可能指示错误原因的信息。这些日志可以帮助识别具体是什么阻止了许可服务器的成功初始化。 #### 4. **权限问题** 确认用于启动ArcGIS License Server的服务账号具有足够的权限执行所需操作。这包括但不限于读取/写入特定目录的权利以及与其他必要进程通信的能力。 #### 5. **软件版本兼容性** 保证所使用的ArcGIS产品及其依赖项之间存在良好的版本匹配度。不一致可能会导致意外行为完全失败激活license server的功能。 #### 示例代码片段:修改服务登录身份 以下是更改Windows服务登录凭据的一个简单PowerShell脚本例子: ```powershell $serviceName = "ArcGISServerObjectManager" $newUsername = ".\LocalSystemUser" # 替换为实际用户名 $newPassword = ConvertTo-SecureString "" -AsPlainText -Force Set-Service -Name $serviceName -StartupType Automatic New-ServiceCredential -ServiceName $serviceName -Account $newUsername -Password $newPassword Restart-Service -Name $serviceName ``` 上述脚本仅作为示范用途,请依据实际情况调整参数值后再实施。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值