英语音调符号和对应的字体有哪些?

包含了重音符号、连读符号、语调符号升调和降调的字体有哪些?

只找到一个连字符:‿


1 Like

重音符 ˈ
轻音符 ˌ
连读符
升调符 :arrow_upper_right:
降调符 :arrow_lower_right:

1 Like

感谢楼上的回复,再补充一个链接,方便在线查看:

https://www.internationalphoneticassociation.org/IPAcharts/inter_chart_2018/IPA_2018.html

有一点要指出,ipacharts中的音标和各种英语国际音标中相同的音标不等价,英语国际音标是从ipa拆出来服务英语的,是一种音位的描述,不是音值的描述,实际发音中一个英语国际音标代表的音值有许多变体,不能把ipa的发音照搬到英语上。

1 Like

python处理简单字体问题还是蛮方便的,比如读取字体中字符列表、判断是符是否为空白的:

import os
import random
import numpy as np
from copy import deepcopy
from PIL import Image, ImageDraw, ImageFont
from typing import Dict, List, Set, Tuple
from fontTools.ttLib import TTCollection, TTFont

    def _load_font(font_path: str) -> TTFont:
        """
        Read ttc, ttf, otf font file, return a TTFont object
        """

        # ttc is collection of ttf
        if font_path.endswith('ttc'):
            ttc = TTCollection(font_path)
            # assume all ttf in ttc file have same supported chars
            return ttc.fonts[0]

        if font_path.endswith('ttf') or font_path.endswith('TTF') or font_path.endswith('otf'):
            ttf = TTFont(font_path, 0, allowVID=0,
                         ignoreDecompileErrors=True,
                         fontNumber=-1)

            return ttf

    def get_font_charset(font_path: str) -> Set[str]:
        '''
        读取字体中的字符列表

        Args:
            font_path: 字体路径

        Return:
            字体字符列表
        '''

        try:
            font_name = os.path.basename(font_path)
            ttf = load_font(font_path)
            chars_set = set()
            for table in ttf['cmap'].tables:
                for k, _ in table.cmap.items():
                    char = chr(k)
                    chars_set.add(char)
        except Exception:
            print('读取字体字符列表失败')

        return chars_set

    def is_char_visible(font: ImageFont.FreeTypeFont, char: str) -> bool:
        """
        返回是否可见字符

        Args:
            font 字体
            char 字符

        Return
            是否可见
        """

        box = font.getbbox(char)
        if box is None or box[3] - box[1] < 1:
            return False

        gray = Image.fromarray(np.zeros((box[3], box[2]), dtype=np.uint8))
        draw = ImageDraw.Draw(gray)
        draw.text((0, 0), char, 100, font=font)

        return np.max(np.array(gray)) > 0
1 Like

基于上面实例代码改改,可以批量从字体列表中搜索有指定字符的字体及检查这个字符在字体中是否有效。

1 Like