You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何批量将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脚本插件,写个简单的脚本就能一键批量转换:

  1. 把下面的代码复制下来,保存为 batch_png_to_gbr.py 文件
  2. 把文件放到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
  3. 重启GIMP,你会在「文件」→「创建」菜单里找到「批量PNG转GBR」选项
  4. 选择你的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脚本就能搞定:

  1. 复制下面的代码保存为 batch_png_to_pat.py,放到GIMP插件目录
  2. 重启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文件里,加载一次就能用所有图案,可以用这个脚本:

  1. 保存为 batch_png_to_single_pat.py 放到插件目录
  2. 重启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

火山引擎 最新活动