You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ImageSharp获取字体的全部可用样式?含特殊样式获取方案

解决ImageSharp获取Bahnschrift特殊样式(如SemiCondensed)的问题

问题核心在于FontFamily.GetAvailableStyles()仅返回FontStyle枚举值(仅包含Normal、Bold、Italic、BoldItalic),而Bahnschrift的SemiCondensed属于**字体拉伸(FontStretch)**属性,和字重(FontWeight)共同构成字体的完整变体,需要通过以下方式获取:

步骤1:获取字体族的所有可用字体实例

使用FontFamily.GetAvailableFonts()方法,该方法返回包含完整属性(拉伸、字重、样式)的Font对象集合,而非单一的样式枚举。

步骤2:筛选目标样式

遍历集合,根据Font.Stretch、Font.Weight、Font.Style属性组合筛选,或直接通过字体全名匹配:

示例代码

// 初始化系统字体集合
var fontCollection = new FontCollection();
fontCollection.InstallSystemFonts();

// 获取Bahnschrift字体族
var bahnschriftFamily = fontCollection.Get("Bahnschrift");

// 方式1:通过拉伸属性精确筛选SemiCondensed(结合Regular字重、Normal样式)
var semiCondensedFont = bahnschriftFamily.GetAvailableFonts()
    .FirstOrDefault(f => f.Stretch == FontStretch.SemiCondensed 
                      && f.Weight == FontWeight.Regular 
                      && f.Style == FontStyle.Normal);

// 方式2:通过字体全名模糊匹配(适用于属性不明确的情况)
// var semiCondensedFont = bahnschriftFamily.GetAvailableFonts()
//     .FirstOrDefault(f => f.FullName.Contains("SemiCondensed"));

if (semiCondensedFont != null)
{
    // 创建指定大小的字体用于绘制
    var drawingFont = semiCondensedFont.CreateFont(16);
    // 执行文本绘制逻辑...
}

关键说明

  • FontStretch枚举包含多种拉伸值,比如Condensed、SemiCondensed、Normal、SemiExpanded等,可直接匹配目标样式。
  • 部分字体的变体可能同时包含字重(如Bold)和拉伸(如SemiCondensed),只需调整筛选条件中的Font.Weight即可获取对应变体。

内容的提问来源于stack exchange,提问作者SulfurChunk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 15:07:22