La meilleure chose à propos de la réponse de ThorSummoner est qu'elle a attiré l'attention sur le plugin d'exportation OpenRaster, qui se trouve en réalité dans le fichier file-openraster.py
dans l'installation de GIMP.
En lisant son code (et avec un peu d'aide du navigateur de procédures intégré), j'ai pu déterminer que les calques d'un XCF de GIMP peuvent être enregistrés dans des PNG individuels en allant dans Filtres > Python-fu > Console dans l'interface, et en entrant le code suivant dans l'interpréteur Python intégré :
import os
# Si vous avez plusieurs images ouvertes, vous devrez peut-être ajuster
img = gimp.image_list()[0]
savefn = gimp.pdb['file-png-save-defaults']
outpath = "/home/$USER/Pictures" # (ou r"C:\Users\$USER\Pictures", etc)
for lay in img.layers:
# Même si vos noms de calques contiennent des espaces, aucun problème
outname = lay.name + ".png"
savefn(img, lay, os.path.join(outpath, outname), outname)
# tapez une ligne supplémentaire pour sortir du bloc indenté
Vous verrez la barre de progression dans la barre d'état de la fenêtre d'image commencer à parcourir tous vos calques, en écrivant chacun dans un fichier PNG portant le même nom, dans le répertoire que vous avez spécifié comme outpath
. (Qui doit déjà exister, sinon ajoutez un os.makedirs(outpath, exist_ok=True)
avant la boucle.)
Si certains de vos noms de calques sont les mêmes, c'est un problème, car cela écrasera joyeusement les fichiers déjà écrits. Attention à GIMPtor.
Éditer : Si vous avez des calques portant le même nom, vous pourriez facilement ignorer les noms et plutôt écrire les calques dans des fichiers numérotés. Remplacez simplement la boucle finale ci-dessus par quelque chose comme :
for n, lay in enumerate(img.layers):
outname = f"Calque {n:03}.png"
savefn(img, lay, os.path.join(outpath, outname), outname)
Cela écrira les calques dans des fichiers PNG nommés "Calque 000.png" à "Calque 999.png" (ou autant de calques sont présents, si moins de 1000).
Si la version de Python de Gimp ne supporte pas les f-strings (Python 3.6+), ceci est exactement équivalent :
outname = "Calque {0:03}.png".format(n)