Python 3 скрипт или gimp скрипт-фу для изменения порядка индексных изображений карты цветов - PullRequest
0 голосов
/ 26 мая 2020

Раньше я хотел поменять местами значения цвета в палитре индексированной цветовой карты, но это, похоже, не то, что я хочу сделать ... поскольку тогда цвета на изображении также меняются местами (черный становится пурпурным, а пурпурный становится черным, это беспорядок ). Мне нужно упорядочить порядок цветов в палитре или, в частности, переместить пурпурный цвет, чтобы он стал первым цветом уже проиндексированного изображения.

GIMP имеет карту - переупорядочить карту цветов, окно позволяет перетащить пурпурный цвет, чтобы он был первым (индекс 0), а затем он у вас вначале, без фактической замены значений цвета, просто заказывайте в цветовой карте. Но это не пакетный процесс, поэтому ищется сценарий.

Но может Python сделать это с помощью GIMP, используя цвет переупорядочения (найдите индекс №, содержащий 255,0255, который будет другим номером индекса для каждого открытого изображения ), а затем переместите индекс № к первому изображению для каждого открытого изображения, затем сохраните / экспортируйте все PNG. Установка цвета индекса 0 на пурпурный и индекс # на черный, который обычно имеет значение индекса 0, не является вариантом, это изменяет значение цветов и, следовательно, цветов изображения! Должны быть расставлены индексы

ИЛИ python без gimp. Как отдельный скрипт.

1 Ответ

0 голосов
/ 26 мая 2020

В 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]

Если вы хотите поместить это в сценарий, запускаемый в пакетном режиме, см. здесь .

...