Пользуясь Библиотекой Обработки изображений Python, я могу звонить
img.convert("P", palette=Image.ADAPTIVE)
или
img.convert("P", palette=Image.WEB)
но есть ли способ преобразовать в произвольную палитру?
p = []
for i in range(0, 256):
p.append(i, 0, 0)
img.convert("P", palette=p)
где это отобразит каждый пиксель на самый близкий цвет, найденный в изображении? Или поддерживаемый для Image.WEB
и ничто иное?
Первый пример ImagePalette
модуля docs показывает, как прикрепить палитру к изображению, но это изображение уже должно быть в режиме "P"
или "L"
. Однако можно адаптировать пример для преобразования полного RGB-изображения в палитру по вашему выбору:
from __future__ import division
import Image
palette = []
levels = 8
stepsize = 256 // levels
for i in range(256):
v = i // stepsize * stepsize
palette.extend((v, v, v))
assert len(palette) == 768
original_path = 'original.jpg'
original = Image.open(original_path)
converted = Image.new('P', original.size)
converted.putpalette(palette)
converted.paste(original, (0, 0))
converted.show()