如何使用Fontforge Python脚本导出带透明背景的PNG字体图标?
方案1:直接修改FontForge导出参数实现透明背景
FontForge的glyph.export()方法支持通过预设背景色参数实现透明导出,你只需要在遍历glyph前加一行配置,指定背景色为完全透明即可。修改后的代码如下:
import os from fontforge import * font = open(os.sys.argv[1]) # 设置背景色为完全透明(格式为0xAARRGGBB,AA为透明度通道,00为完全透明) font.background_color = 0x00000000 for glyph in font: if font[glyph].isWorthOutputting(): # 第三个参数指定是否启用alpha通道,设为True即可 font[glyph].export(font[glyph].glyphname + ".png", None, True)
注:如果你的FontForge版本较老不支持上述参数,可使用下面的后处理方案。
方案2:导出后批量处理替换白色背景为透明
如果第一种方案不生效,可以先按原代码导出带白背景的PNG,再用Pillow库批量处理成透明背景,步骤如下:
- 先安装Pillow库:
pip install pillow - 运行如下处理脚本:
from PIL import Image import os # 替换为你的PNG文件所在目录 png_dir = "./" for filename in os.listdir(png_dir): if filename.endswith(".png"): img = Image.open(os.path.join(png_dir, filename)) img = img.convert("RGBA") datas = img.getdata() new_data = [] for item in datas: # 把纯白色(RGB值都为255)的像素替换为完全透明 if item[0] == 255 and item[1] == 255 and item[2] == 255: new_data.append((255, 255, 255, 0)) else: new_data.append(item) img.putdata(new_data) img.save(os.path.join(png_dir, filename), "PNG")
如果你的图标本身包含纯白色元素,可以调整代码里的白色判断阈值,允许相近的白色也被替换为透明即可。
内容的提问来源于stack exchange,提问作者dartoism
相关产品推荐
相关产品推荐

