| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import { SystemFont } from "@/types/common"
- /**
- * 判断操作系统是否存在某字体
- * @param fontName 字体名
- */
- export const getSupportFonts = (fontNames: SystemFont[]) => {
- let supportFonts: SystemFont[] = []
- const size = 100
- const width = 100
- const height = 100
- const str = 'a'
- const canvas = document.createElement('canvas')
- const ctx = canvas.getContext('2d', { willReadFrequently: true })
- if (!ctx) return supportFonts
-
- canvas.width = width
- canvas.height = height
- ctx.textAlign = 'center'
- ctx.fillStyle = 'black'
- ctx.textBaseline = 'middle'
- return fontNames.filter(item => {
- if (typeof item.value !== 'string') return false
- const arial = 'Arial'
- if (item.value.toLowerCase() === arial.toLowerCase()) return true
- const getDotArray = (_fontFamily: string) => {
- ctx.clearRect(0, 0, width, height)
- ctx.font = `${size}px ${_fontFamily}, ${arial}`
- ctx.fillText(str, width / 2, height / 2)
- const imageData = ctx.getImageData(0, 0, width, height).data
- return [].slice.call(imageData).filter(item => item !== 0)
- }
- return getDotArray(arial).join('') !== getDotArray(item.value).join('')
- })
- }
- export async function loadFont(fontFamily: string) {
- let font
- try {
- const fonts = window.queryLocalFonts();
- font = fonts.filter(item => item.family === fontFamily)[0]
- } catch(e: any) {
- console.log(`Cannot query fonts: ${e.message}`)
- } finally {
- return font
- }
- }
|