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

 火... [复制链接]  102查看
易西 发表于 2026-1-23 22:48:51 | 显示全部楼层 |阅读模式
本帖最后由 易西 于 2026-1-23 23:00 编辑
" W( K6 w0 n$ s) j! N
# J: \. \/ ]" d' s+ Nfontforge如何一次选择多个svg字体文件2 {# }5 w$ W" B  h# \# X
[发帖际遇]: 易西 发帖时在路边捡到 1 金钱,偷偷放进了口袋. 幸运榜 / 衰神榜
 楼主| 易西 发表于 2026-1-23 22:49:18 | 显示全部楼层
在使用 FontForge 编辑或转换 SVG 字体文件时,你可能希望同时选择多个文件以批量处理它们。FontForge 支持多种操作来管理多个字体文件,但直接在 GUI 界面中选择多个文件进行操作稍有不同。以下是一些步骤和方法,可以帮助你选择和操作多个 SVG 字体文件:
& f  J8 l: I  W! z) f0 u6 N* X) V7 H3 p
. o* \' |0 K: D1. 使用命令行批量导入) u) @) D8 x6 J1 l1 s: O: ]
如果你熟悉命令行,可以通过命令行一次性导入多个 SVG 文件。打开终端或命令提示符,使用以下命令:
# Q. h) _# ~4 b7 E2 s8 E- s4 h6 Z  R# G4 |: ?! i" \! M
bash
  w& S) D8 @% a+ q9 e4 vCopy Code
  M  _" e: w1 Rfontforge -script import_svg.pe fonts/*.svg8 Y" J! g1 E/ \  k  ~6 ]1 H3 {, e
这里,import_svg.pe 是一个 FontForge 脚本,用于导入 SVG 文件。你需要先创建一个这样的脚本,或者使用现有的脚本。fonts/*.svg 表示当前目录下所有以 .svg 结尾的文件。3 b" U6 l1 X. g  }* i6 d

/ d4 ~( I$ a6 g, t  k; M2. 使用 FontForge 的菜单操作
) {; r6 P0 L5 P虽然 FontForge 的 GUI 不直接支持在文件菜单中批量选择多个文件(如直接在“文件”->“打开”中多选),但你可以通过以下方法间接实现:
  T) _7 N( V% y2 e. l( z6 R+ `
7 `( ~+ H. h. G* s方法一:逐一打开
, P2 k2 Q" `/ S" h) d; A虽然这不是批量操作,但如果你只需要打开几个文件,可以逐一打开它们。每次打开后,可以通过“文件”->“附加字体”来添加更多的 SVG 文件。: ?0 ~( D; d% F
  X5 V# W* l0 T& b- x
方法二:使用“附加字体”功能$ f, K+ F* a5 l8 c1 i) H  G
在 FontForge 中打开一个 SVG 文件后,你可以通过“文件”->“附加字体”来添加更多的 SVG 文件。这种方法可以让你在一个项目中同时处理多个字体文件。
6 o# J( H  a6 u9 O3 c& p) c4 V
9 L) j0 v, k2 D  i& k! B3. 自动化脚本* p) [6 s; V5 h" K
为了更高效地处理多个 SVG 文件,你可以编写一个小的自动化脚本(例如使用 Python 和 subprocess 模块),来批量打开和操作这些文件。例如:
& D' f1 U* s+ l$ w( K* C" k7 n9 H9 ]! W2 q) K
python" c8 q; N9 J2 l* A+ @  q
Copy Code4 ?% }' X1 ?4 B; `
import subprocess
& e$ I2 c0 z7 v0 kimport os
+ L3 d! [% y- J- z1 L4 ?* P
& L% Y: H6 c) {5 d9 \& A4 q6 |0 Ksvg_files = [f for f in os.listdir('.') if f.endswith('.svg')]+ r9 S6 S% @1 y6 O
for svg_file in svg_files:
- E( E% Q: W* R7 b* n' q    subprocess.call(['fontforge', '-script', 'import_svg.pe', svg_file])
) b- @8 @. X( t$ ^这个 Python 脚本会遍历当前目录下的所有 SVG 文件,并使用 FontForge 脚本逐一导入它们。( a1 r' E9 P  Q5 R

  L9 f' @( z, T/ z' L( q9 {, |4. 使用外部工具辅助选择文件
9 D* |: _5 r: Z! B" A# P9 @8 o在某些情况下,你可以使用外部的文件管理器(如 Windows 的资源管理器、Mac 的 Finder 或 Linux 的 Nautilus)来选择多个文件,然后将它们拖放到 FontForge 的图标上。虽然这不是直接的 FontForge 功能,但它可以作为一种快速的方法来开始处理多个文件。
& B& D/ l- t" _/ H# `+ ?2 `1 X3 j- [9 _% s
结论
1 ?: s7 }! L6 c' V3 W3 l8 {尽管 FontForge 的 GUI 不直接支持在打开文件时选择多个文件,但通过上述方法中的一种或几种组合,你可以有效地管理和操作多个 SVG 字体文件。对于更复杂的批量处理任务,使用命令行脚本或编写小的自动化脚本可能是最有效的方法。3 p& S* q( C( S; h" K$ M  T2 ?# h# T

: P) u: R/ `/ g' m2 Q% K参考
[发帖际遇]: 易西 被钱袋砸中进医院,看病花了 3 金钱. 幸运榜 / 衰神榜
 楼主| 易西 发表于 2026-1-23 22:54:29 | 显示全部楼层
https://www.cnblogs.com/zuoziti/p/18325149# L4 O% V% z8 j9 ?! q8 P1 p$ ^
参考
 楼主| 易西 发表于 2026-1-23 22:55:41 | 显示全部楼层
 楼主| 易西 发表于 2026-1-23 23:01:02 | 显示全部楼层
  1. 5 _" x+ @1 X5 A% d, Q3 x. _% s
  2. import fontforge2 d" v' Z, j  _) u0 }
  3. import os
    , d' B% S& ]( l" m

  4. ; u2 s" w4 v- s- A9 @* o% a
  5. # 创建新字体
      Z" y2 a  s- F& D
  6. font = fontforge.font()
    : j# T; }# W5 f# T8 \' o) Q

  7. * d4 l; Z( ~3 d
  8. # 指定SVG文件夹路径7 s- q! u. }  G0 X, E9 J
  9. svg_folder = "path/to/your/svg/files") k1 T7 x& u' L! ^; K
  10. 9 e6 A# y; K5 j' |
  11. # 遍历文件夹中的所有SVG文件5 M8 m* D4 A) b9 {2 _  H
  12. for filename in os.listdir(svg_folder):4 t* ]( Y( `& l) I
  13.     if filename.endswith('.svg'):
    7 A- A. ]# i6 B- i$ Q! O
  14.         # 构建完整文件路径1 D- u0 b& g1 x; h' i
  15.         svg_path = os.path.join(svg_folder, filename)8 J, U: L% S4 K+ x
  16.         ( \: j( J& u% e0 r% E( L1 P
  17.         # 获取文件名(不含扩展名)作为字形名称; p1 x' h8 e" M9 R" p
  18.         glyph_name = os.path.splitext(filename)[0]' X, j# s6 G: U
  19.         
    1 D+ M- B3 \* O( @/ c
  20.         # 创建新字形
    ) ~8 \! N2 M# j
  21.         glyph = font.createChar(-1, glyph_name)* B3 J3 e  x! U8 [  A( n* F
  22.         
    . \, H9 c6 F& d$ x
  23.         # 从SVG导入轮廓% H' ?8 J" p6 U1 \
  24.         glyph.importOutlines(svg_path)" b- r* N# g/ g9 n7 j2 X# O
  25. 1 Y' E9 O  ?+ G# [
  26. # 保存字体文件" V+ i; h* l! x0 t5 U3 K. k3 V
  27. font.generate("output_font.ttf")
    6 D$ B' `; e) l1 Q) F+ P# [7 @
复制代码

, f4 M' z* j# Q/ `
) d4 M1 |" r0 ~8 {参考
 楼主| 易西 发表于 2026-1-23 23:06:43 | 显示全部楼层

  1. 4 F' Q! {( s( y
  2. import fontforge0 ]9 \, l% y4 r+ K% V
  3. import os+ N/ q# }9 b% o. Q
  4. 0 L: n; a' a4 ]
  5. # 创建新字体2 L- r8 O* f" I9 H# p
  6. font = fontforge.font()
    9 J; d/ e3 K% ~* _

  7. 1 D% f9 A. Q. }2 c1 G& e) E5 E
  8. # 指定SVG文件夹路径$ A! c7 w0 y! N9 G  o, R% g- J
  9. svg_folder = "path/to/your/svg/files"
    ) w' C) e2 s! Y% Y
  10. ) |" l% N( Y* _( ~% _; p
  11. # 获取所有SVG文件
    ) |& j/ h9 ^# h: n% M" I
  12. svg_files = [f for f in os.listdir(svg_folder) if f.endswith('.svg')]/ t+ J1 G8 R6 V4 F9 q6 m& `

  13. 4 \* E6 i& W( M
  14. # 按文件名排序5 q! k4 w0 m& B
  15. svg_files.sort()
    & p9 r/ ~0 T* n3 ]. w- ~
  16. : D, Z( @: ~3 ?) I" y/ y
  17. # 为每个SVG文件创建字形) q9 `$ J1 E8 T2 t" t/ E3 ^
  18. for i, filename in enumerate(svg_files):
    % j: M7 a. _- `5 F/ L
  19.     svg_path = os.path.join(svg_folder, filename)
    / I1 N3 Z+ U- B0 j
  20.     ) y' m0 b3 v* X# X, m0 h
  21.     # 使用文件名作为字形名称$ j$ l" J5 Z! J( m- G# L
  22.     glyph_name = os.path.splitext(filename)[0]
    ; y1 W/ y0 C2 ^' d" z9 P' @, Z
  23.    
    ! E2 T' G/ Z" U6 m& C' R, y  j
  24.     # 创建字形(从U+1000开始的Unicode范围): }( Z- ?8 W7 _
  25.     glyph = font.createChar(0x1000 + i, glyph_name)1 n- f: R! l  }8 i0 b9 T0 @
  26.    
    9 T! X5 u: G% ]7 c' m
  27.     # 导入SVG轮廓
    5 |5 L; v) Z: k. k
  28.     glyph.importOutlines(svg_path)2 k" V5 n2 i9 h* e: D9 W
  29. + }9 T3 Y# ?9 R/ b5 _# ?. G. |: U
  30. # 保存字体文件
    ' L# A8 V# m' Y; B/ G7 X, ?
  31. font.generate("output_font.ttf")& o6 W' S* r' J) M
  32. print(f"成功导入 {len(svg_files)} 个SVG文件到字体")( H( p/ s2 I) E1 r1 R/ R, X! Y

  33. ' C9 [: J# c$ G+ a* X+ G
复制代码
7 D. V9 j9 n+ L0 j. Y
) k$ m# {0 W4 c  |0 U
参考
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.5

Copyright © , 吾侪网

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