Генерация 8-битной палитры из файла png с помощью Python

Какой будет лучшая библиотека на основе Python для создания 8-битной палитры из данного файла .png. Как в фотошопе генерит под формат .pal.

PS: Входной PNG уже в 8-битном формате. (палитрованный)

С Уважением


person Hellnar    schedule 06.07.2010    source источник
comment
Файл png уже имеет палитру? Или это реальный цвет?   -  person slurdge    schedule 06.07.2010
comment
Я отредактировал вопрос для уточнения.   -  person Hellnar    schedule 06.07.2010
comment
Это вообще не генерация; это просто извлечение.   -  person Nyerguds    schedule 31.03.2017


Ответы (2)


Мне не удалось найти спецификацию для .PAL (Photoshop называет его «Microsoft PAL»), но этот формат легко перепроектировать. Это работает:

def extractPalette(infile,outfile):
    im=Image.open(infile)
    pal=im.palette.palette
    if im.palette.rawmode!='RGB':
        raise ValueError("Invalid mode in PNG palette")
    output=open(outfile,'wb')
    output.write('RIFF\x10\x04\x00\x00PAL data\x04\x04\x00\x00\x00\x03\x00\x01') # header
    output.write(''.join(pal[i:i+3]+'\0' for i in range(0,768,3))) # convert RGB to RGB0 before writing 
    output.close()
person user249290    schedule 06.07.2010

Если это изображение на палитре, вы можете использовать метод getcolors() после того, как загрузите его в PIL. Если это изображение RGB или RGBA, вам нужно уменьшить цвет, пока у вас не будет максимум 256 цветов.

person Ignacio Vazquez-Abrams    schedule 06.07.2010
comment
спасибо за предложение, Игнасио, а как насчет создания версии палитры .pal этого метода? С Уважением - person Hellnar; 06.07.2010
comment
Я понятия не имею, как выглядит этот формат файла. Я подозреваю, что в конечном итоге вам нужно будет использовать struct. - person Ignacio Vazquez-Abrams; 06.07.2010