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

 火... [复制链接]  101查看
易西 发表于 2026-1-23 22:48:51 | 显示全部楼层 |阅读模式
本帖最后由 易西 于 2026-1-23 23:00 编辑 + S" P3 C* p, n# q' |! k6 u

3 r$ w2 I+ A! A+ Jfontforge如何一次选择多个svg字体文件: V" G) a/ l0 S( T. i  H
[发帖际遇]: 易西 发帖时在路边捡到 1 金钱,偷偷放进了口袋. 幸运榜 / 衰神榜
 楼主| 易西 发表于 2026-1-23 22:49:18 | 显示全部楼层
在使用 FontForge 编辑或转换 SVG 字体文件时,你可能希望同时选择多个文件以批量处理它们。FontForge 支持多种操作来管理多个字体文件,但直接在 GUI 界面中选择多个文件进行操作稍有不同。以下是一些步骤和方法,可以帮助你选择和操作多个 SVG 字体文件:
; P* W5 b+ s( X% D
/ O. X6 E: N. u2 F) c9 i% _7 A1. 使用命令行批量导入
- d9 W( T  N$ `3 J; @4 f4 o: {如果你熟悉命令行,可以通过命令行一次性导入多个 SVG 文件。打开终端或命令提示符,使用以下命令:
1 X) c9 x; w6 I6 `) z7 r6 x& M* F1 i* a, E; D
bash
; W7 f& u% d; X% p2 m, Z2 UCopy Code
- o2 K: _+ M1 [% {$ [  r( p& L) G2 m3 Gfontforge -script import_svg.pe fonts/*.svg
) b$ }! l5 P3 A这里,import_svg.pe 是一个 FontForge 脚本,用于导入 SVG 文件。你需要先创建一个这样的脚本,或者使用现有的脚本。fonts/*.svg 表示当前目录下所有以 .svg 结尾的文件。/ O* w# \1 _/ B8 J6 }
* `: t" H9 z  X5 R" W
2. 使用 FontForge 的菜单操作
6 I. I' f; t/ r5 Z- v+ ~/ w$ G8 ?虽然 FontForge 的 GUI 不直接支持在文件菜单中批量选择多个文件(如直接在“文件”->“打开”中多选),但你可以通过以下方法间接实现:
+ l5 A2 D, @  ~. ~
  s$ V4 d  [; \7 m; N+ j3 Q1 M方法一:逐一打开. \/ z. L3 G$ [2 ]& p9 I
虽然这不是批量操作,但如果你只需要打开几个文件,可以逐一打开它们。每次打开后,可以通过“文件”->“附加字体”来添加更多的 SVG 文件。2 P. e  ?6 X0 Z

8 C5 {. g3 R! E* G' R! m方法二:使用“附加字体”功能
. G* p% E4 t4 R在 FontForge 中打开一个 SVG 文件后,你可以通过“文件”->“附加字体”来添加更多的 SVG 文件。这种方法可以让你在一个项目中同时处理多个字体文件。" U" e3 p4 a7 T$ Q

6 `. j2 `( t' a" G' z* ^3. 自动化脚本) V. I; z* ?: c6 C* g, n
为了更高效地处理多个 SVG 文件,你可以编写一个小的自动化脚本(例如使用 Python 和 subprocess 模块),来批量打开和操作这些文件。例如:! i: `- [5 @9 i/ D- Y: e) c0 n/ m

% J2 j$ U# z6 `6 Cpython
8 p9 {) z2 f) ~6 C8 l; Y/ SCopy Code
6 Y: z/ q$ W; ]  b9 x- p0 }  ~import subprocess
& a( R$ Q/ Z0 G7 J6 Rimport os, m9 j* Y2 x( y, I/ C+ ?
3 }$ C& k; [! H. x
svg_files = [f for f in os.listdir('.') if f.endswith('.svg')]# p. J4 i  G! Q+ h
for svg_file in svg_files:
& u, a. b) V5 k# t3 K$ s' {: I    subprocess.call(['fontforge', '-script', 'import_svg.pe', svg_file]). L$ r1 p2 f, {0 Q' w
这个 Python 脚本会遍历当前目录下的所有 SVG 文件,并使用 FontForge 脚本逐一导入它们。
1 j4 }# d, y, ~/ B7 V2 m1 ?5 g; s
0 M7 [+ A" N; e8 L. ?$ w; i- V4. 使用外部工具辅助选择文件
3 {+ r" b4 @: A4 W" b  E在某些情况下,你可以使用外部的文件管理器(如 Windows 的资源管理器、Mac 的 Finder 或 Linux 的 Nautilus)来选择多个文件,然后将它们拖放到 FontForge 的图标上。虽然这不是直接的 FontForge 功能,但它可以作为一种快速的方法来开始处理多个文件。7 f  O0 F" n5 N1 w) w3 N/ R: O
' }5 j; h: X& u
结论" D4 ^4 }( @3 V5 O; \
尽管 FontForge 的 GUI 不直接支持在打开文件时选择多个文件,但通过上述方法中的一种或几种组合,你可以有效地管理和操作多个 SVG 字体文件。对于更复杂的批量处理任务,使用命令行脚本或编写小的自动化脚本可能是最有效的方法。9 \( {8 u0 }4 S0 E# [( Q. H
: |; \$ N2 g8 }! N# v
参考
[发帖际遇]: 易西 被钱袋砸中进医院,看病花了 3 金钱. 幸运榜 / 衰神榜
 楼主| 易西 发表于 2026-1-23 22:54:29 | 显示全部楼层
https://www.cnblogs.com/zuoziti/p/18325149
% Q9 h9 g# Y. G/ }0 P  p参考
 楼主| 易西 发表于 2026-1-23 22:55:41 | 显示全部楼层
 楼主| 易西 发表于 2026-1-23 23:01:02 | 显示全部楼层

  1. % ], m& N, c( i; Q/ b1 m2 A
  2. import fontforge$ ?; g! h6 {# C5 t
  3. import os
    & `+ H/ [  X* Y, e$ g: T
  4. + r1 _+ p% }' K) a7 r; r8 ^7 f
  5. # 创建新字体
    : a( m$ ]# n) w3 Q- y/ }; w
  6. font = fontforge.font()
    6 {' }/ v6 z$ u! l

  7. , W* L$ S0 L  @7 ~
  8. # 指定SVG文件夹路径
    ( F0 M& r) I/ F7 d2 E
  9. svg_folder = "path/to/your/svg/files", c, F4 J% p% j
  10. 4 O# Z% ^+ B/ e/ I7 E
  11. # 遍历文件夹中的所有SVG文件
    ) x- G. c( Q4 L* ?
  12. for filename in os.listdir(svg_folder):  x4 s  b% X" j
  13.     if filename.endswith('.svg'):( I4 Y, a& h' G8 U4 X  j
  14.         # 构建完整文件路径2 V* W+ c! j& L9 D7 O
  15.         svg_path = os.path.join(svg_folder, filename)
    7 U: Q  q9 @  [" Z) _2 q
  16.         
    & w( I0 ~! B% ~7 e, o2 z9 |
  17.         # 获取文件名(不含扩展名)作为字形名称
    * ]! ^3 _3 K/ e5 Q5 _6 W0 w
  18.         glyph_name = os.path.splitext(filename)[0], Z" B& e# U9 R  R  h7 H5 {
  19.         0 z8 J& _! _6 ~& @# P
  20.         # 创建新字形3 J6 |0 ~" D6 L) C5 h
  21.         glyph = font.createChar(-1, glyph_name)
    6 c% _/ [1 J' Z4 q- i. C) P# ]$ R
  22.         
    2 w& X& N7 g' B' t  b
  23.         # 从SVG导入轮廓
    % {( D. E, z. p% U: ~& w
  24.         glyph.importOutlines(svg_path)! b# `( i, Y0 Y* d3 H' O: a
  25. 9 v( a7 r) m4 z3 v+ \- L
  26. # 保存字体文件$ ?5 ~6 B/ l% Y2 a2 C5 @+ f& R; ~
  27. font.generate("output_font.ttf")( I( ^( [& J$ ~/ q  f
复制代码

$ P7 n5 c% K* G/ _- a0 r7 O
1 D( C, m& x$ v参考
 楼主| 易西 发表于 2026-1-23 23:06:43 | 显示全部楼层
  1.   Q1 N  U; y; _" z+ y4 s# @3 ^6 ?
  2. import fontforge  R8 K4 i# U+ L* d$ q0 T6 ]; k) b
  3. import os
    9 z0 S1 m5 ]" I3 |) b7 L
  4. & ]2 A- C8 x/ M! y  ]! l" |; K
  5. # 创建新字体
    " k! B/ \! {5 M, L
  6. font = fontforge.font()
    ! l& _" P% v% T. [1 h+ T9 `
  7. 3 z+ V0 L  r2 l. b! D" D" l
  8. # 指定SVG文件夹路径
    ) M: Q% C3 M* Y  F- e; G. i
  9. svg_folder = "path/to/your/svg/files"! {. }$ Z" w0 U# ]5 d' u
  10. . \" `4 @) w; a+ A0 E7 A
  11. # 获取所有SVG文件5 h6 m9 o1 h* G2 s
  12. svg_files = [f for f in os.listdir(svg_folder) if f.endswith('.svg')]3 ^4 b9 X" k  O6 F. L7 I. ^9 d
  13. . D8 u0 g% t8 j* w
  14. # 按文件名排序' {' Q# M! R* s4 e6 T4 C+ x3 w, h
  15. svg_files.sort()  W* y0 |2 p6 {$ u0 J) B

  16. 3 j' Y0 C, R  N0 w
  17. # 为每个SVG文件创建字形' G+ s0 Z/ Z2 D/ C3 n- `/ t! k8 t
  18. for i, filename in enumerate(svg_files):; @1 X$ @' P2 P5 B- u! f! T- K
  19.     svg_path = os.path.join(svg_folder, filename)
    2 G- z7 a0 @  y# N2 g2 ?
  20.    
    ; x: o, S9 J4 E2 p9 {' V
  21.     # 使用文件名作为字形名称
    8 ?+ Y; M3 w, s! M7 x* y1 O; o
  22.     glyph_name = os.path.splitext(filename)[0]
    ( s. K- L1 t2 q2 G, d6 [9 c
  23.     4 b3 Z% S0 _, A1 L- a2 v; z0 J: E
  24.     # 创建字形(从U+1000开始的Unicode范围)
    1 K+ G7 j7 `  i! W" |
  25.     glyph = font.createChar(0x1000 + i, glyph_name)
    7 I; K3 w9 t' a8 u
  26.     % v2 i5 t$ J9 ?# @/ {: z( H$ @
  27.     # 导入SVG轮廓
    7 w- V4 @9 [0 O# w" c. `
  28.     glyph.importOutlines(svg_path)
    % ]$ C+ _% F' i+ i0 v. ~
  29. 7 F4 j7 d$ d3 q7 d- B
  30. # 保存字体文件- f, k" c1 F- _% @# Z
  31. font.generate("output_font.ttf")4 u: T: e# o/ g. Y- I9 }$ O/ F+ m( r
  32. print(f"成功导入 {len(svg_files)} 个SVG文件到字体")( C" e. n$ n! v) {- O6 [7 t% [% B

  33. : {5 t* }+ L; V3 R6 Y; F. v
复制代码

: R* ^: K( @2 W6 f7 A
- @& R( Z+ k; z# e' C; w. [) l) j% B参考
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.5

Copyright © , 吾侪网

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