如何批量将PNG图片转换为GIMP画笔与图案文件(.GBR、.PAT)
如何批量将PNG图片转换为GIMP画笔与图案文件(.GBR、.PAT)
我太懂你这种为了D&D战棋地图,想把一堆PNG素材快速转成GIMP能用的画笔和图案的心情了——手动一个个弄真的会疯!针对你遇到的ImageMagick报错、GIMP命令行搞不懂的问题,我给你整理了两种靠谱的批量解决方案,分别搞定画笔(.GBR)和图案(.PAT):
一、批量转PNG为GIMP画笔(.GBR)
你用ImageMagick转GBR报错的核心原因是:GBR不是单纯的图像格式,它包含了GIMP画笔的元数据(比如名称、间距、类型),ImageMagick只是把PNG改了个后缀,完全没加这些必要的元数据,导致GIMP解析时直接出错(你看到的“超过最大尺寸”就是因为元数据缺失,GIMP读错了图像尺寸)。
下面两种方法都是基于GIMP原生工具,完美兼容:
方法1:Python-Fu脚本批量处理(最直观好上手)
GIMP支持Python脚本插件,写个简单的脚本就能一键批量转换:
- 把下面的代码复制下来,保存为
batch_png_to_gbr.py文件 - 把文件放到GIMP的插件目录:
- Windows:
C:\Program Files\GIMP 2\lib\gimp\2.0\plug-ins - Linux:
~/.config/GIMP/2.10/plug-ins - Mac:
~/Library/Application Support/GIMP/2.10/plug-ins
- Windows:
- 重启GIMP,你会在「文件」→「创建」菜单里找到「批量PNG转GBR」选项
- 选择你的PNG素材文件夹和输出GBR的文件夹,点击「确定」即可
from gimpfu import * import os def batch_png_to_gbr(input_folder, output_folder): # 自动创建输出文件夹(如果不存在) if not os.path.exists(output_folder): os.makedirs(output_folder) # 遍历文件夹里所有PNG文件 for filename in os.listdir(input_folder): if filename.lower().endswith('.png'): input_path = os.path.join(input_folder, filename) # 打开PNG图片 image = pdb.file_png_load(input_path, input_path) if image is None: print(f"⚠️ 无法打开文件: {input_path}") continue # 用文件名作为画笔名称,设置默认间距100% brush_name = os.path.splitext(filename)[0] output_path = os.path.join(output_folder, f"{brush_name}.gbr") # 保存为GBR画笔 pdb.file_gbr_save(image, image.active_layer, output_path, output_path, brush_name, 100, 0) # 关闭图片释放内存 pdb.gimp_image_delete(image) print(f"✅ 已转换: {filename} → {brush_name}.gbr") # 注册插件到GIMP菜单 register( "batch_png_to_gbr", "批量将PNG转换为GIMP画笔", "批量处理指定文件夹中的PNG图片,生成GIMP兼容的GBR画笔", "Stack Exchange Contributor", "Stack Exchange Contributor", "2024", "批量PNG转GBR", "", # 无需输入图像 [ (PF_DIRNAME, "input_folder", "输入PNG文件夹", ""), (PF_DIRNAME, "output_folder", "输出GBR文件夹", "") ], [], batch_png_to_gbr, menu="<Image>/File/Create" ) main()
方法2:GIMP命令行批量处理(适合喜欢命令行的用户)
如果你不想用插件,也可以用GIMP的后台命令行模式运行,只需要把上面的脚本逻辑改成命令行可调用的格式,或者直接用下面的命令模板(记得替换路径):
gimp -i -b '(batch-png-to-gbr "/home/you/dnd/pngs" "/home/you/dnd/brushes")' -b '(gimp-quit 0)'
参数解释:
-i:关闭交互模式,后台静默运行-b:执行GIMP脚本命令- 最后一个
-b '(gimp-quit 0)':处理完自动退出GIMP
二、批量转PNG为GIMP图案(.PAT)
GIMP的PAT文件可以是单个图案,也可以是多个图案的集合,这里给你两种选择:
方法1:批量生成单个PAT文件(每个PNG对应一个PAT)
和上面的画笔脚本逻辑类似,写个Python脚本就能搞定:
- 复制下面的代码保存为
batch_png_to_pat.py,放到GIMP插件目录 - 重启GIMP后,在「文件」→「创建」里找到「批量PNG转PAT」运行即可
from gimpfu import * import os def batch_png_to_pat(input_folder, output_folder): if not os.path.exists(output_folder): os.makedirs(output_folder) for filename in os.listdir(input_folder): if filename.lower().endswith('.png'): input_path = os.path.join(input_folder, filename) image = pdb.file_png_load(input_path, input_path) if image is None: print(f"⚠️ 无法打开文件: {input_path}") continue pattern_name = os.path.splitext(filename)[0] output_path = os.path.join(output_folder, f"{pattern_name}.pat") # 保存为PAT图案 pdb.file_pat_save(image, image.active_layer, output_path, output_path, pattern_name) pdb.gimp_image_delete(image) print(f"✅ 已转换: {filename} → {pattern_name}.pat") register( "batch_png_to_pat", "批量将PNG转换为GIMP图案", "批量处理指定文件夹中的PNG图片,生成GIMP兼容的PAT图案", "Stack Exchange Contributor", "Stack Exchange Contributor", "2024", "批量PNG转PAT", "", [ (PF_DIRNAME, "input_folder", "输入PNG文件夹", ""), (PF_DIRNAME, "output_folder", "输出PAT文件夹", "") ], [], batch_png_to_pat, menu="<Image>/File/Create" ) main()
方法2:将所有PNG合并为单个PAT集合文件(更方便管理)
如果想把所有素材都放到一个PAT文件里,加载一次就能用所有图案,可以用这个脚本:
- 保存为
batch_png_to_single_pat.py放到插件目录 - 重启GIMP后,在「文件」→「创建」里找到「批量PNG转单个PAT集合」,选择输入文件夹和输出的PAT文件名即可
from gimpfu import * import os def batch_png_to_single_pat(input_folder, output_path): # 创建临时图像(GIMP保存PAT需要基于图像上下文) temp_image = pdb.gimp_image_new(1, 1, RGB) temp_layer = pdb.gimp_layer_new(temp_image, 1, 1, RGB_IMAGE, "temp", 100, NORMAL_MODE) pdb.gimp_image_add_layer(temp_image, temp_layer, 0) # 遍历所有PNG,导入为图案 for filename in os.listdir(input_folder): if filename.lower().endswith('.png'): input_path = os.path.join(input_folder, filename) image = pdb.file_png_load(input_path, input_path) if image is None: print(f"⚠️ 无法打开文件: {input_path}") continue pattern_name = os.path.splitext(filename)[0] # 注册图案到GIMP pdb.gimp_pattern_register(pattern_name, pattern_name, image.width, image.height, 0, 0, image.active_layer.pixels) pdb.gimp_image_delete(image) print(f"✅ 已添加图案: {pattern_name}") # 保存所有图案到单个PAT文件 pdb.file_pat_save(temp_image, temp_layer, output_path, output_path, "My DnD Battle Map Patterns") pdb.gimp_image_delete(temp_image) print(f"🎉 所有图案已保存到: {output_path}") register( "batch_png_to_single_pat", "批量将PNG转换为单个GIMP图案集合", "将指定文件夹中的所有PNG图片合并为一个GIMP PAT图案集合文件", "Stack Exchange Contributor", "Stack Exchange Contributor", "2024", "批量PNG转单个PAT集合", "", [ (PF_DIRNAME, "input_folder", "输入PNG文件夹", ""), (PF_FILE, "output_path", "输出PAT文件路径", "dnd_battlemap_patterns.pat") ], [], batch_png_to_single_pat, menu="<Image>/File/Create" ) main()
备注:内容来源于stack exchange,提问作者kakost




