11

Python Imaging Library を使用して、私は呼び出すことができます

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ていますか?

4

2 に答える 2

9

のソースコードを調べているconvert()と、 を参照していることがわかりim.quantizeました。 quantizeパレット引数を取ることができます。パレットを持つ Image を指定すると、この関数はそのパレットを取得して画像に適用します。

例:

    src = Image.open("sourcefilewithpalette.bmp")
    new = Image.open("unconvertednew24bit.bmp")
    converted = new.quantize(palette=src)
    converted.save("converted.bmp")

他の提供された答えは私にとってはうまくいきませんでした(それは本当に悪いダブルパレット変換か何かをしました)が、この解決策はうまくいきました。

于 2012-03-23T02:51:56.067 に答える
3

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()
于 2010-06-25T02:51:18.290 に答える