В GIMP:
pdb.plug_in_colormap_remap(image, drawable, num_colors, map)
This procedure takes an indexed image and lets you alter
the positions of colors in the colormap without visually
changing the image.
map: Remap array for the colormap
Таким образом, вам просто нужно будет вычислить карту, которая преобразует палитру изображения в нужную вам палитру.
На практике вы можете получить цвета в сопоставить таким образом:
_, colormap = pdb.gimp_image_get_colormap(image)
colors=[tuple(colormap[i:i+3]) for i in range(0,len(colormap),3)]
дает:
[(180, 113, 205), (189, 142, 104), (130, 176, 204), (156, 195, 140), (107, 218, 136), (130, 218, 72)]
Список карт представляет собой просто список индексов (значение в позиции X является индексом в цветовой карте результата цвета в положение X на текущей карте). Так, например, чтобы поменять местами первый и последний:
pdb.plug_in_colormap_remap(image, None, 6, [5,1,2,3,4,0])
(параметр drawable
игнорируется)
Конечно, вам нужно вычислить карту, но если у вас уже есть справочная палитра в качестве списка триплетов это просто:
map=[reference.index(color) for color in colors]
Если вы хотите поместить это в сценарий, запускаемый в пакетном режиме, см. здесь .