フォント ファイルからすべてのグリフを個別の SVG として特定の場所にエクスポート し 画像ファイルを作成
FontForge
FontForge Open Source Font Editor
スクリプト出力用のサブディレクトリy:\svgを作成し、このサブディレクトリをスクリプトに配置する必要があります
FontForge メニューから: ファイル/開く
[ファイル] / [スクリプトの実行] を使用し、ラジオボックス FF をオンにして、次のように入力します。
SelectAll()
UnlinkReference()
Export("y:/svg/%n-%e.svg")
fonttools
from fontTools.ttLib import TTFont
import os
from textwrap import dedent
from fontTools.pens.svgPathPen import SVGPathPen
# フォルダの作成
output_path = "y:/output_svg/"
if not os.path.exists(output_path):
os.mkdir(output_path)
# GlyphをSVGに変換
def save_all_glyph_as_svg(font):
glyph_set = font.getGlyphSet()
cmap = font.getBestCmap()
# 標準の ASCENT と DESCENT を head テーブルから取得
ascender = font['head'].yMax # 標準のASCENT値
descender = font['head'].yMin # 標準のDESCENT値
height = ascender - descender # ASCENTとDESCENTの範囲で高さを設定
for c in cmap:
glyph_name = cmap[c]
glyph = glyph_set[glyph_name]
svg_path_pen = SVGPathPen(glyph_set)
glyph.draw(svg_path_pen)
# pathデータを取得
path_data = svg_path_pen.getCommands()
# pathデータが空の場合はスキップ
if not path_data.strip():
print(f"Skipping empty glyph for codepoint: {c}")
continue
width = glyph.width
# SVGコンテンツを生成
content = dedent(f'''\
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 {-ascender} {width} {height}">
<g transform="scale(1, -1)">
<path d="{path_data}"/>
</g>
</svg>
''')
# SVGファイルを出力(ファイル名を "0xコードポイント.svg" の形式に変更)
with open(output_path + "0x{:04x}.svg".format(c), 'w') as f:
f.write(content)
# フォントファイルを読み込み、SVG出力
font = TTFont('y:/Regular.ttf')
save_all_glyph_as_svg(font)
参考
TTFの全グリフをPNGにしてみる #Python – Qiita
10進数のファイル名を16進数にする
import os
import shutil, sys
input_folder = 'y:/input_png'
output_folder = 'y:/input_svg'
for filename in os.listdir(input_folder):
if filename.endswith(('.svg')):
input_path = os.path.join(input_folder, filename)
basename_without_ext = os.path.splitext(os.path.basename(filename))[0]
# output_path = os.path.join(output_folder,"{:#0{width}x}".format(int(basename_without_ext), width=6))+'.svg'
#
output_path = os.path.join(output_folder,"{:#x}".format(int(basename_without_ext)))+'.svg'
new_path = shutil.copy(input_path,output_path )
ディスカッション
コメント一覧
まだ、コメントがありません