请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
楼主: yzwduck

FontLoaderSub: 加载ass/ssa字幕所需字体的小工具 (r7-20200525)

4

主题

39

帖子

46

VC币

白金会员

Rank: 12Rank: 12Rank: 12

积分
66581
vbr9d 发表于 2019-5-8 14:05:58 | 显示全部楼层
本帖最后由 vbr9d 于 2019-5-8 21:52 编辑

不知道什么时候开始aegisub就没法正常更新字体缓存,没法检查字体了,感觉有可能是因为这软件影响?想请问有什么解决办法吗?我已经尝试过手动删除C:\Windows\System32\FNTCACHE.DAT和C:\Windows\ServiceProfiles\LocalService\AppData\Local\FontCache下的所有文件,重启过,开关过windows font cache service,依然是检查就秒说无法找到字体,安装新字体以后也没用
-------------------------
https://github.com/Aegisub/Aegisub/issues/92
抱歉,好像不是这软件导致,发现貌似是win10 更新后导致?不知道怎么解决...不太想把win10回滚,不知道有没有其他检查字体缺字的软件...?

回复 支持 反对

使用道具 举报

2

主题

83

帖子

0

VC币

荣誉会员

Rank: 14Rank: 14Rank: 14Rank: 14

积分
99267
yzwduck  楼主| 发表于 2019-5-8 21:55:14 | 显示全部楼层
vbr9d 发表于 2019-5-8 14:05
不知道什么时候开始aegisub就没法正常更新字体缓存,没法检查字体了,感觉有可能是因为这软件影响?想请问 ...

这个锅需要让 aegisub/Windows 来背。
正常系统全局安装字体时,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts 会保存字体名称与其文件路径,aegisub 它们只读取了这个列表。
但是最近(两、三个月?) Windows 的字体配置有些变化,允许普通用户把字体安装到用户目录下,这些信息保存在 HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Fonts,所以那些软件已经少考虑了这部分情况。

而更复杂的是,如果使用 FontLoader(Sub)/其他字体管理工具“临时加载字体”,我不知道现在 Windows 把这部分信息保存在哪里,但测试发现,只有 GDI 接口,以及开了字体缓存情况下的 DirectWrite 接口,才能访问到这部分信息。
FontLoaderSub 使用 GDI 接口来判断系统是否存在字体、临时加载字体,所以字体的加载与枚举是吻合的,可以通过重复加载同一套字幕字体,看它们的输出结果来判断。

解决方法:让 aegisub 等软件使用更合理的 API 来枚举系统中的字体。
@tonyhsie 大佬怎么看这个问题?
回复 支持 反对

使用道具 举报

39

主题

669

帖子

5599

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
881595

卓越贡献

tonyhsie 发表于 2019-5-9 01:17:19 | 显示全部楼层
vbr9d 发表于 2019-5-8 14:05
不知道什么时候开始aegisub就没法正常更新字体缓存,没法检查字体了,感觉有可能是因为这软件影响?想请问 ...

解決方式很簡單



C:\Users\<用户名>\AppData\Local\Microsoft\Windows\Fonts



裡面的所有字型檔案拷貝出來,然後刪除掉這些字型


然後重新安裝,安裝時記得選擇 "為所有使用者安裝",而不是 "安裝"




這樣一切字型程式都會和以前一樣正常運作

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

39

主题

669

帖子

5599

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
881595

卓越贡献

tonyhsie 发表于 2019-5-9 01:27:28 | 显示全部楼层
yzwduck 发表于 2019-5-8 21:55
这个锅需要让 aegisub/Windows 来背。
正常系统全局安装字体时,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ ...

Windows 10 1809 版開始,允許使用者自行安裝字型到自己的使用者帳戶裡 (不再需要系統管理者權限,以下簡稱這種字型為 user font)

這種安裝方式是以前沒有的,所以大部分舊的字型相關程式 (如 Aegisub) / API 並不支援


新的字型安裝方式,便是在字型檔案上按滑鼠右鍵,選 "安裝"

舊的字型安裝方式,現在改叫 "為所有使用者安裝" (需系統管理者權限)

如圖




在 ListAssFonts 的討論串裡也有討論過相關問題兩次,分別是

http://bbs.acgrip.com/forum.php?mod=viewthread&tid=1894&page=17#pid41025

http://bbs.acgrip.com/forum.php?mod=redirect&goto=findpost&ptid=1894&pid=43190&fromuid=8179


目前 ListAssFonts 可以辨識出系統安裝的 user font 字型  (這是因為 .NET API 支援 user font 的關係,非程式本身的特殊支援)

但無法拷貝  (這功能就需要改程式了,對 [HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Fonts] 這裡的 user font 作特別處理)


我個人是建議一般用戶 "別使用這種新的字型安裝方式" 以免造成自己的不便與麻煩  (像 Aegisub 裡,跟字型檔案相關的功能,遇到 user font 都會失效)


至於現有的字型程式該不該去支援 user font,我想這就看開發者個人的想法了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

2

主题

83

帖子

0

VC币

荣誉会员

Rank: 14Rank: 14Rank: 14Rank: 14

积分
99267
yzwduck  楼主| 发表于 2019-5-9 06:19:55 | 显示全部楼层
tonyhsie 发表于 2019-5-9 01:27
Windows 10 1809 版開始,允許使用者自行安裝字型到自己的使用者帳戶裡 (不再需要系統管理者權限,以下簡 ...

作为开发者而言,我觉得限制用户使用系统的新特性,只能作为临时的应对措施;让代码适应新系统特性,才是解决问题的方法。
如果“在 win10 1809 下使用各种字体加载位置”、“查找字幕指定字体是否缺字”这个需求,目前没有工具能实现的话,也许有将其实现的价值,来写一个新的/整合到已有工具里。
可以确认的是,这个功能不会出现在 FontLoaderSub 里;如果(很久之后,比如半年)我把这工具做出来的话,感觉会和 ListAssFonts 有很多重复的地方,所以想打听一下大佬的想法。

注:通过 AddFontResource 临时加载的字体,貌似目前只有开了字体缓存的 DirectWrite 才能获取到它的路径信息。
回复 支持 反对

使用道具 举报

4

主题

39

帖子

46

VC币

白金会员

Rank: 12Rank: 12Rank: 12

积分
66581
vbr9d 发表于 2019-5-9 10:42:00 | 显示全部楼层
yzwduck 发表于 2019-5-8 21:55
这个锅需要让 aegisub/Windows 来背。
正常系统全局安装字体时,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ ...

感谢解释~理解原因了
回复 支持 反对

使用道具 举报

4

主题

39

帖子

46

VC币

白金会员

Rank: 12Rank: 12Rank: 12

积分
66581
vbr9d 发表于 2019-5-9 10:43:38 | 显示全部楼层
tonyhsie 发表于 2019-5-9 01:17
解決方式很簡單


感谢解决方法!!现在弄好了
回复 支持 反对

使用道具 举报

39

主题

669

帖子

5599

VC币

星辰大海

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
881595

卓越贡献

tonyhsie 发表于 2019-5-10 01:53:26 | 显示全部楼层
yzwduck 发表于 2019-5-9 06:19
作为开发者而言,我觉得限制用户使用系统的新特性,只能作为临时的应对措施;让代码适应新系统特性,才是 ...
作为开发者而言,我觉得限制用户使用系统的新特性,只能作为临时的应对措施;让代码适应新系统特性,才是解决问题的方法。
您這個想法,原則上我是完全同意的


不過針對 user font 這個個案來說,個人是覺得,這個設計,並不是很完善的一套字型機制
很容易造成用戶在 Win10 1809 之後安裝的 user font,無法使用舊字型軟體來處理的問題

(而且直接把 user font 這種新機制作到舊選項裡面,舊的字型安裝機制反而變成新選項,對 MS 這種作法我也覺得不太妥當)
(因為用戶自己可能也無法知道問題出在哪:明明自己安裝字型的方式跟以前一模一樣,怎麼突然 Aegisub 就出問題了?)


所以我個人會比較傾向暫時保持觀望態度,同時建議用戶 "非必要的話,還是別使用 user font 為上策"

如果“在 win10 1809 下使用各种字体加载位置”、“查找字幕指定字体是否缺字”这个需求,目前没有工具能实现的话,也许有将其实现的价值,来写一个新的/整合到已有工具里。
可以确认的是,这个功能不会出现在 FontLoaderSub 里;如果(很久之后,比如半年)我把这工具做出来的话,感觉会和 ListAssFonts 有很多重复的地方,所以想打听一下大佬的想法。


如果您的意思是,"某字幕使用了已安裝的 user font,但想判斷此字體是否有缺字幕用到的字"

那目前 Aegisub & ListAssFonts 都沒有這樣的功能,ListAssFonts 目前也不打算增加這方面的特性


不過 Aegisub 是開源軟件,或許您可以考慮直接修改它的源碼,來實現這個功能,不用從頭打造一個新的工具

回复 支持 反对

使用道具 举报

2

主题

83

帖子

0

VC币

荣誉会员

Rank: 14Rank: 14Rank: 14Rank: 14

积分
99267
yzwduck  楼主| 发表于 2019-5-10 06:28:47 | 显示全部楼层
tonyhsie 发表于 2019-5-10 01:53
您這個想法,原則上我是完全同意的

如果只是考虑 user font 的话,直接改 aegisub 貌似不难,但如果要把字体引擎换成 directwrite,来更彻底解决这问题的话,貌似工作量不小。
最近三次元比较忙,只能暂时把这事鸽着。
回复 支持 反对

使用道具 举报

7

主题

180

帖子

1

VC币

中级会员

Rank: 3Rank: 3

积分
14253
Rikkano 发表于 2019-5-10 20:49:40 | 显示全部楼层
macOS 用户也想要(
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表