2026年了,PR/AE/AI的UI字体还在用宋体

自从换了高分屏,PR和AE就用得都特别难受,因为UI界面字体几乎全都是宋体。 高分屏的宋体会以矢量字形渲染,而不是清晰的点阵字形,再加上暗色系主题的加持,几乎每时每刻都在强碱我的眼睛 于是用codex逆了一下,发现A÷(Adobe也可以是A÷)是直接把字体硬编码的,不给任何外部配置项,可以说是故意给...
2026年了,PR/AE/AI的UI字体还在用宋体
2026年了,PR/AE/AI的UI字体还在用宋体

自从换了高分屏,PR和AE就用得都特别难受,因为UI界面字体几乎全都是宋体。
高分屏的宋体会以矢量字形渲染,而不是清晰的点阵字形,再加上暗色系主题的加持,几乎每时每刻都在强碱我的眼睛 :sweat_smile:

于是用codex逆了一下,发现A÷(Adobe也可以是A÷)是直接把字体硬编码的,不给任何外部配置项,可以说是故意给用户喂屎了

PR/AME

入口在UIFramework.dll,硬编码了CJK字体。最÷的地方在于日文和韩文指定的都是非衬线体,唯独中文是衬线体,这是何意味呢?

qword_1805322D8 = "Meiryo"          // Japanese
qword_1805322F8 = "Gulim Regular"   // Korean
qword_180532318 = "SimSun"          // Chinese
qword_1805323F8 = "Adobe Clean UX"  // generic / other UIF font entry

if ( ASL::GetPrimaryLanguageID(a1) == ASL::kLanguage_Japanese )
{
copy(&v143, &qword_1805322D8);
}
else if ( ASL::GetPrimaryLanguageID(...) == ASL::kLanguage_Korean )
{
copy(&v143, &qword_1805322F8);
}
else if ( ASL::GetPrimaryLanguageID(...) == ASL::kLanguage_Chinese )
{
copy(&v143, &qword_180532318);
}

AE

AE在Dictionaries/zh_CN下面有字典文件,而且是纯文本的。里面也直接指定了宋体:

Dictionaries\zh_CN\after_effects_zh_CN.dat:
  "$$$/AE/FontStyle/Large=12 plain STSong{{*MSWindows*}}10 plain SimSun"
  "$$$/AE/FontStyle/LargeBold=12 bold STSong{{*MSWindows*}}10 bold SimSun"
  "$$$/AE/FontStyle/LargeItalic=12 italic STSong{{*MSWindows*}}10 italic SimSun"
  "$$$/AE/FontStyle/Medium=11 plain STSong{{*MSWindows*}}09 plain SimSun"
  "$$$/AE/FontStyle/MediumBold=11 bold STSong{{*MSWindows*}}09 bold SimSun"
  "$$$/AE/FontStyle/MediumItalic=11 italic STSong{{*MSWindows*}}09 italic SimSun"
  "$$$/AE/FontStyle/Small=09 plain STSong{{*MSWindows*}}09 plain SimSun"
  "$$$/AE/FontStyle/SmallBold=09 bold STSong{{*MSWindows*}}09 bold SimSun"

可以在这里直接改,但要注意还需要把改完的dat算出sha-256之后转base64填到signatures.xml里面去

      <Reference URI="#PackageContents">
        <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
        <DigestValue>57QGM6XZ7GNq4iQ+UY1p7BwO9OKpUlKf16vx9cyTJlw=</DigestValue>
      </Reference>

但是更难绷的是,AE对中文字体其实是有特殊判定逻辑的。如果在中文环境下读取字体的时候检测到SimSun,会调用dvaui::ui::Theme::GetDefaultFontName()去替换成默认值,而GetDefaultFontName()在中文环境下又会调用dvaui::config::GetSpecialChinaFont(),这个SpecialChinaFont也是硬编码的,返回的是什么呢?还是SimSun:distorted_face: A÷的帽子戏法你就学去吧

AI

AI和AE一样也有字典文件,但并不是纯文本而是二进制,所以暂时没在这个方向上继续分析。
不过同样也存在硬编码,入口在dvaai.dll

    if ( WinUtils::UseGB18030Font(v15) )
    {
      v17 = dvacore::string::AsciiToUTF16(v39, "SimSun-18030", 12);
    }
    else
    {
      v17 = dvacore::string::AsciiToUTF16(v35, "SimSun", 6);
    }

综上所述因为都是硬编码,所以直接让codex写了个patcher,有需要的佬可以直接用,保护视力远离宋体 :innocent:
https://github.com/scrpr/adobe-no-simsun
使用效果:

图片

5 个帖子 - 3 位参与者

阅读完整话题

来源: LinuxDo 最新话题查看原文