fontforge如何一次选择多个svg字体文件

 火... [复制链接]  103查看
易西 发表于 2026-1-23 22:48:51 | 显示全部楼层 |阅读模式
本帖最后由 易西 于 2026-1-23 23:00 编辑
5 [$ l! u  e; g/ _0 d$ C# f# B6 a/ Y  E
fontforge如何一次选择多个svg字体文件. {8 X/ L9 }) }" r/ i
[发帖际遇]: 易西 发帖时在路边捡到 1 金钱,偷偷放进了口袋. 幸运榜 / 衰神榜
 楼主| 易西 发表于 2026-1-23 22:49:18 | 显示全部楼层
在使用 FontForge 编辑或转换 SVG 字体文件时,你可能希望同时选择多个文件以批量处理它们。FontForge 支持多种操作来管理多个字体文件,但直接在 GUI 界面中选择多个文件进行操作稍有不同。以下是一些步骤和方法,可以帮助你选择和操作多个 SVG 字体文件:( b& D/ _$ Q; p

) x6 J+ o: S; l$ a6 K1. 使用命令行批量导入
- F& n6 g1 b# L  }) r# y& I如果你熟悉命令行,可以通过命令行一次性导入多个 SVG 文件。打开终端或命令提示符,使用以下命令:
2 m4 t7 \$ C- F. Q) ^% v& s: n- t6 i% V0 b
bash! M+ A6 Q# h& X1 l
Copy Code
6 U  D7 c3 c8 H3 d) a. Ffontforge -script import_svg.pe fonts/*.svg
4 Q  F+ ~, s! ~% W7 u1 \这里,import_svg.pe 是一个 FontForge 脚本,用于导入 SVG 文件。你需要先创建一个这样的脚本,或者使用现有的脚本。fonts/*.svg 表示当前目录下所有以 .svg 结尾的文件。+ l8 Z( j4 u( d
: s" D, M& x/ b3 h& K% _
2. 使用 FontForge 的菜单操作
+ @+ D' I7 h8 v1 a7 N虽然 FontForge 的 GUI 不直接支持在文件菜单中批量选择多个文件(如直接在“文件”->“打开”中多选),但你可以通过以下方法间接实现:6 X! x- }9 }. e2 G( ~
/ {$ G; N: U' V
方法一:逐一打开) y- M! {% O9 Y* l; k
虽然这不是批量操作,但如果你只需要打开几个文件,可以逐一打开它们。每次打开后,可以通过“文件”->“附加字体”来添加更多的 SVG 文件。
1 u1 ?  W. q7 {, E  T
6 y* s  N! J4 D, r; S% w5 T3 C6 W方法二:使用“附加字体”功能0 ?) I# b3 o: \. J" u) ~7 ~- ~
在 FontForge 中打开一个 SVG 文件后,你可以通过“文件”->“附加字体”来添加更多的 SVG 文件。这种方法可以让你在一个项目中同时处理多个字体文件。
- d8 H6 F$ v- s7 [8 ?# d5 e+ t
' f3 h+ Y# m  W1 H9 o3. 自动化脚本/ j) x/ G6 Y/ r$ Y0 t
为了更高效地处理多个 SVG 文件,你可以编写一个小的自动化脚本(例如使用 Python 和 subprocess 模块),来批量打开和操作这些文件。例如:. D) j6 Z, b4 }+ E. J* \: O8 M
6 j- j+ b" t5 K" Y# W) \
python
$ D0 e+ W8 _5 XCopy Code2 ]0 r' [0 p7 z  Q4 B4 |
import subprocess
& Z/ i, ~& F4 V! |import os
) [) m7 J3 u/ I8 I# q) @! I$ T* Y5 \- S( _* @7 o, E- U
svg_files = [f for f in os.listdir('.') if f.endswith('.svg')]
% t0 n0 H) b. ]! V3 Z- I( ^for svg_file in svg_files:3 I* N1 ?7 C! O, }6 T$ r. l
    subprocess.call(['fontforge', '-script', 'import_svg.pe', svg_file])( X: x! ?/ y9 S0 K& I9 |# T
这个 Python 脚本会遍历当前目录下的所有 SVG 文件,并使用 FontForge 脚本逐一导入它们。7 u! P5 z- G. Z  m

7 |2 d6 h( ]# f: u6 D7 I$ D4. 使用外部工具辅助选择文件
6 b% M, I9 z) U* o6 [* z7 B1 h: B: q& h在某些情况下,你可以使用外部的文件管理器(如 Windows 的资源管理器、Mac 的 Finder 或 Linux 的 Nautilus)来选择多个文件,然后将它们拖放到 FontForge 的图标上。虽然这不是直接的 FontForge 功能,但它可以作为一种快速的方法来开始处理多个文件。
+ B- V( I# ~7 }/ {! e0 U) W' R2 S* o
结论/ }' M  w* ]1 a1 ]7 F
尽管 FontForge 的 GUI 不直接支持在打开文件时选择多个文件,但通过上述方法中的一种或几种组合,你可以有效地管理和操作多个 SVG 字体文件。对于更复杂的批量处理任务,使用命令行脚本或编写小的自动化脚本可能是最有效的方法。
3 y* M* @1 i; n9 }; t+ g  l
6 a2 n. f& a% `5 }' U" E参考
[发帖际遇]: 易西 被钱袋砸中进医院,看病花了 3 金钱. 幸运榜 / 衰神榜
 楼主| 易西 发表于 2026-1-23 22:54:29 | 显示全部楼层
https://www.cnblogs.com/zuoziti/p/18325149
, s) z  d& ?$ K8 T9 X0 S; w  j参考
 楼主| 易西 发表于 2026-1-23 22:55:41 | 显示全部楼层
https://github.com/Losketch/FontForge_Scripts_Collection6 O! X# L  V) d: q8 T% B4 c
参考
 楼主| 易西 发表于 2026-1-23 23:01:02 | 显示全部楼层
  1. 9 ?2 s  V8 |. Z1 ?
  2. import fontforge
    1 b: q) D( ]9 q3 ?1 [
  3. import os; }. F7 Q% W9 T+ X( m$ L
  4. - ?' i2 }+ O  u0 L' j
  5. # 创建新字体& w. T1 V% ]6 G" f* n3 Q
  6. font = fontforge.font()
    : `+ U4 {  j1 H1 g' X5 h% o
  7. - ~* Y. k; ]  Z8 X
  8. # 指定SVG文件夹路径! w% D" a+ M- r( B: ]; B
  9. svg_folder = "path/to/your/svg/files"
    0 V) `/ ]% F0 v$ T3 |8 A
  10. : |" v+ {6 p0 l
  11. # 遍历文件夹中的所有SVG文件0 k0 ]' n1 v" B; {( S
  12. for filename in os.listdir(svg_folder):
    4 e1 v5 E% j' [$ F! r
  13.     if filename.endswith('.svg'):7 c1 B6 m" {& s3 E0 B; j5 |8 I
  14.         # 构建完整文件路径  y- h4 ?2 Y" ~/ Y# K3 \
  15.         svg_path = os.path.join(svg_folder, filename)
    ! i1 ~. F* ^1 X4 g( S
  16.         ! s. B1 J( m; M2 P8 I" n( v$ o
  17.         # 获取文件名(不含扩展名)作为字形名称
    1 R& Y& Q( i; Y$ ]8 c
  18.         glyph_name = os.path.splitext(filename)[0]' H1 u) h( g/ S3 ]. H; s- Y
  19.         
    $ @3 Z$ }& t. @# }8 }; Z$ G0 ?
  20.         # 创建新字形
    3 O4 T2 U  D4 E  ]$ D
  21.         glyph = font.createChar(-1, glyph_name)
    & D% j: x4 u! O# A) m: u* N
  22.         
    . G+ `$ ]$ Y  g6 a$ S" D
  23.         # 从SVG导入轮廓2 _5 t8 m- u* V# Z( B  m0 ?: D) i' w
  24.         glyph.importOutlines(svg_path)
    0 l. q4 k; [, H0 L* ]. j
  25. ' `; Q& i0 L$ }1 I; `9 G( r
  26. # 保存字体文件
    $ v& M7 J4 l, I* P6 H4 H! y
  27. font.generate("output_font.ttf")
    0 i) ?  d! L& H& p: N* J* T6 Z5 N
复制代码
  o9 \+ M+ ^; e4 h
" v/ i3 q1 d0 {) O
参考
 楼主| 易西 发表于 2026-1-23 23:06:43 | 显示全部楼层
  1. . h7 l& ?7 K( C" h- m; G
  2. import fontforge
    8 g$ j6 K$ ~8 `% B( i; [; p( b3 m
  3. import os
    : w- h6 M$ s2 |& W4 H% x2 v3 ]5 D

  4. # K- q7 S' D# F2 Z+ ]. C
  5. # 创建新字体" P) g. x# [& t, c
  6. font = fontforge.font()
    5 K. Y6 \- i7 a" v; a+ @1 {
  7. + Y% o8 \6 R# W" u# I$ V
  8. # 指定SVG文件夹路径9 I" m4 N& k9 X5 K2 z& c7 u
  9. svg_folder = "path/to/your/svg/files"
    0 H" _. W# G1 l, h$ `
  10. + d6 P& I# e; L0 }- m0 S
  11. # 获取所有SVG文件
      U$ Q3 c8 f" ?  L4 c, c
  12. svg_files = [f for f in os.listdir(svg_folder) if f.endswith('.svg')]6 C* I1 s, @7 N
  13. 0 H0 |8 n2 V0 I; G
  14. # 按文件名排序
    1 w& e3 _& U" ?' {3 R9 j: ?
  15. svg_files.sort()
    " v: Y* ~/ C5 Z5 P3 @  C

  16. ; e) N: c- F# o/ Z5 q
  17. # 为每个SVG文件创建字形
    8 v3 D9 N( \" b2 ~
  18. for i, filename in enumerate(svg_files):8 d7 p, Z* ~! \
  19.     svg_path = os.path.join(svg_folder, filename). g+ t" a* ]. i- a  H3 y
  20.     5 k& B/ B/ `! T+ q! T: i
  21.     # 使用文件名作为字形名称
    ; r  N, g% M0 N
  22.     glyph_name = os.path.splitext(filename)[0]- Q, y  c4 _8 H" S
  23.    
    % q! b4 f' Y: ~
  24.     # 创建字形(从U+1000开始的Unicode范围)
    & k. B! L6 |" p8 @6 [, d
  25.     glyph = font.createChar(0x1000 + i, glyph_name)
    ' W# `: T- f: u  r
  26.     9 L5 u8 b, @' E8 e. x
  27.     # 导入SVG轮廓
    ) c8 T" z4 \5 O4 o; t8 V
  28.     glyph.importOutlines(svg_path)
    1 U0 R1 L  Y6 R0 P% G  v

  29. 8 D& w5 k- t; {7 h$ |- f8 V) v# J
  30. # 保存字体文件& k6 V" w9 z$ Y7 S0 Q
  31. font.generate("output_font.ttf"); t0 r4 u! O/ [' m4 P& B' [( o3 m
  32. print(f"成功导入 {len(svg_files)} 个SVG文件到字体")
    , m& Y0 |/ s, ^# B$ `- J8 k
  33.   O& s" h( E6 D1 G: ]/ {( Q* e
复制代码
/ I4 @- ^6 m" y( I

& R, I6 [/ M) Q* W! K  b/ Q参考
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

邮箱|首页|小黑屋|吾侪 ( 蜀ICP备2020029307号-4 )

GMT+8, 2026-8-28 15:48 , Processed in 0.038070 second(s), 23 queries .

Powered by Discuz! X3.5

Copyright © , 吾侪网

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