「uniapp实战笔记」微信小程序设置字体的开发踩坑记录(微信小程序支持字体)

最近接到一个需求,需要在微信小程序中做出用户可自定义缩放旋转图片和文字定制功能,开发使用 uni-app,这里记录开发中遇到的几个问题。

「uniapp实战笔记」微信小程序设置字体的开发踩坑记录(微信小程序支持字体)

一、canvas设置字体大小的数值需为整数

使用 canvas 渲染文字时,需要设置文字的字体。

let ctx = uni.createCanvasContext('canvas')ctx.font = '16px Arial' // 设置成功ctx.font = '16.66px Arial' // 这样写会触发警告,不生效

二、字体集font-family兼容的问题

微信小程序中,对于文字字体集的兼容性很差。

IOS 端目前发现只有三种字体能设置成功('Arial', 'Courier New', 'Georgia')。

而 Android 端只有两种字体('serif', 'noto'),且 Android 端设置这两种字体只会在 canvas 中生效,在 DOM 中直接对文本设置这两种字体,没有任何变化。另外,在旧手机(非近一年内发布的新型号)上只会对英文生效。

针对以上问题,有两条路可以走:

一是直接重写一个 H5 页面,使用 webview 内嵌到小程序中(重写太繁琐);

二是按原路继续走,多做些兼容操作。

博主选了第二条路。IOS 端可以不理,系统对那三种字体基本兼容(针对英文)。

但对于Android端,博主首先是使用 uni.loadFontFace 尝试去引入 'serif', 'noto' 这两种字体供 DOM 渲染使用,但即便将字体挂到自己的 OSS 存储系统上进行加载,仍然没有效果。

「uniapp实战笔记」微信小程序设置字体的开发踩坑记录(微信小程序支持字体)

无奈,只能将 .ttf 字体文件转为 base64 引入,只保留英文后的两种字体加载下来,整个包大小只增加了 60KB。

参考链接:

Android 系统字体规范

(https://www.xueui.cn/download/font-download/android-font-down.html)

Noto 字体下载

Noto sans字体免费下载和在线预览-字体天下

字体文件转base64

Online @font-face generator — Transfonter

在线字体提取网站
在线字体提取工具,字体子集生成器 – 在线工具 – 字客网

将处理完需导入的字体放到 CSS 文件中,判断系统为 Android 时导入:

judgeSystem() { let system = uni.getSystemInfoSync().system // 系统信息 this.judgeTextHasCN() // 判断文字中是否存在中文(因设置字体只对英文生效) if (system.includes('Android')) { require('@/common/css/android-font.css') this.textFamilyList = ['serif', 'noto'] this.fontFamily = 'serif' } else { // 其他平台其实还包括windows this.textFamilyList = ['Arial', 'Courier New', 'Georgia'] this.fontFamily = 'Arial' }}

经过 base64 后的字体 CSS 大概长这样:

@font-face { font-family: 'serif'; src: url('data:font/truetype;charset=utf-8;base64,AAEAAAAQAQAABAAARkZUTVq0Nk4AAG...') font-weight: normal; font-style: normal; font-display: swap;}

总结

不同平台对于字体的兼容都不同,其实最完美的方法还是使用 webview。

如果需要对中文也兼容,那还需引入相应的中文字体集,不过全部引入会导致包体积过大。但也有相应的方法,就是动态地对需要的文字做抽离,只引需要的文字,有机会下次再展开聊聊。

期继续给大家分享uni-app实战中的点点滴滴,敬请期待~

欢迎各位关注、留言,大家的支持就是我的动力!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年5月9日 上午9:29
下一篇 2024年5月9日 上午9:40

相关推荐

  • stop观察检查卡

    stop观察检查卡 stop观察检查卡是一种用于确保车辆安全的工具,通常由警察或交通管理部门使用。这些检查卡包含一些特殊的标记和符号,用于指示驾驶员在某些情况下应该停止驾驶或停车。…

    科研百科 2024年11月7日
    0
  • 科技项目验收怎么做?不通过怎么办?(科技项目验收怎么做-不通过怎么办呢)

    科技项目验收不通过怎么办? 科技项目验收是什么? 科技项目验收测试是依据GB/T 17544《信息技术 软件包 质量要求和测试》、GB/T 16260《软件工程 产品质量》,对申报…

    科研百科 2022年9月7日
    194
  • 项目管理体系化

    项目管理体系:从概念到实践 项目管理体系是一种组织和管理项目的方法,旨在确保项目能够按时完成,并在预算内,质量上和时间表上都达到要求。在现代商业环境中,项目管理体系已经成为企业成功…

    科研百科 2024年5月27日
    104
  • 地勘会计企业安措经费应该如何计提(地勘会计企业安措经费应该如何计提)

    地勘会计企业安措经费应该如何计提? 按照现行《企业会计准则》规定,可以不计提福利费、工会经费、教育经费,实际发生福利费、工会经费、教育经费支出时,分别计入“管理费用-职工福利”、“…

    科研百科 2024年4月21日
    100
  • 新闻专业科研项目(新闻系科研项目推荐书有哪些)

    新闻系科研项目推荐书有哪些 新闻系是许多大学开设的一门专业,旨在培养具有新闻采编和传播能力的人才。如果想在新闻领域取得成功,成为一名优秀的新闻工作者,那么进行科研项目是一个重要的学…

    科研百科 2024年8月3日
    86
  • 江苏省中医药科技发展项目(江苏省中医药局 科研项目)

    江苏省中医药局科研项目 近年来,江苏省中医药局一直致力于推动中医药事业的发展,特别是在治疗慢性病方面。为了进一步提高中医药在治疗慢性病方面的研究水平,江苏省中医药局发起了一项科研项…

    科研百科 2024年4月4日
    176
  • 浦东服务式办公(上海服务式办公网站)

    上海服务式办公网站: 为您带来高效便捷的服务体验 随着互联网的普及和发展,服务式办公网站已经成为现代企业必备的办公平台之一。上海作为中国经济最发达的城市之一,也涌现出了一批优秀的服…

    科研百科 2024年8月30日
    31
  • 海外科研项目

    海外科研项目 近年来,随着全球化的不断深入,越来越多的海外科研项目开始走向中国。这些项目不仅为中国人民提供了新的科技手段,也为中国经济的发展和社会进步做出了重要贡献。 海外科研项目…

    科研百科 2024年10月19日
    0
  • 麻省理工科研项目教学方向麻省理工科研项目教学方向

    麻省理工学院(MIT)作为世界顶尖的科技学府,一直以来都在探索如何有效地传授科研项目的核心概念和方法。近年来, MIT 开始将教学方向从传统的课堂传授转向更加实践和实用的教学方法,…

    科研百科 2024年9月13日
    26
  • 参研项目说明怎么写

    参研项目说明怎么写 随着科技的不断发展,科研项目的不断涌现。在参加科研项目的过程中,项目说明怎么写成为了一个重要的问题。本文将探讨如何写好参研项目说明,以便更好地理解和参与科研项目…

    科研百科 2024年10月17日
    0