Преобразование изображения в конкретную палитру с использованием PIL без сглаживания

Я пытаюсь преобразовать изображение RGB в формат PNG для использования определенной индексированной палитры с помощью библиотеки подушек (Python Image Library, PIL). Но я хочу преобразовать, используя метод «округление до ближайшего цвета», а не сглаживание, потому что изображение является пиксельной графикой, а сглаживание искажает контуры областей и добавляет шум к областям, которые должны быть плоскими.

Я старалсяImage.Image.paste(), и он использовал четыре указанных цвета, но это дало размытое изображение:

from PIL import Image
oldimage = Image.open("oldimage.png")
palettedata = [0, 0, 0, 102, 102, 102, 176, 176, 176, 255, 255, 255]
newimage = Image.new('P', oldimage.size)
newimage.putpalette(palettedata * 64)
newimage.paste(oldimage, (0, 0) + oldimage.size)
newimage.show()    

Я старалсяImage.Image.quantize() как упомянуто вПикту ответ на аналогичный вопрос, но это также произвело дизеринг:

from PIL import Image
palettedata = [0, 0, 0, 102, 102, 102, 176, 176, 176, 255, 255, 255]
palimage = Image.new('P', (16, 16))
palimage.putpalette(palettedata * 64)
oldimage = Image.open("School_scrollable1.png")
newimage = oldimage.quantize(palette=palimage)
newimage.show()

Я старалсяImage.Image.convert()и оно конвертировало изображение без сглаживания, но оно включало цвета, отличные от указанных, предположительно потому, что использовало либо веб-палитру, либо адаптивную палитру

from PIL import Image
oldimage = Image.open("oldimage.png")
palettedata = [0, 0, 0, 102, 102, 102, 176, 176, 176, 255, 255, 255]
expanded_palettedata = palettedata * 64
newimage = oldimage.convert('P', dither=Image.NONE, palette=palettedata)
newimage.show()

Как автоматически преобразовать изображение в определенную палитру без сглаживания? Я хотел бы избежать решения, которое обрабатывает каждый отдельный пиксель в Python, как предложено вОтвет Джона Ла Руи и комментарии к нему, потому что мое предыдущее решение, включающее внутренний цикл, написанный на Python, оказалось заметно медленным для больших изображений.

Ответы на вопрос(2)

Ваш ответ на вопрос