回答編集履歴
1
コード修正
answer
CHANGED
@@ -1,29 +1,34 @@
|
|
1
1
|
[8bitカラーのBMP画像のカラーパレット操作(python PIL)。](http://d.hatena.ne.jp/redtaxi/20090526/1243330783)の手法でできそうです。
|
2
2
|
コードにすると以下のような感じになるでしょうか。
|
3
3
|
```Python
|
4
|
+
|
4
5
|
from PIL import Image
|
5
6
|
import matplotlib.pyplot as plt
|
6
7
|
import numpy as np
|
7
8
|
|
8
|
-
img = Image.open(r"
|
9
|
+
img = Image.open(r"lena.png") # http://optipng.sourceforge.net/pngtech/img/lena.html
|
9
10
|
#インデックスカラーに変換
|
10
11
|
img = img.convert("P")
|
11
12
|
|
12
13
|
# カラーパレットにアクセスする。
|
13
14
|
palette = img.getpalette()
|
14
15
|
|
16
|
+
# リストの値は index=0 から順番に [R, G, B, R, G, B, ...]
|
17
|
+
palette = np.array(palette).reshape(-1, 3)
|
18
|
+
|
15
19
|
# 入れ替え
|
16
20
|
tmp = palette[2]
|
17
21
|
palette[2] = palette[15]
|
18
22
|
palette[15] = tmp
|
19
23
|
|
20
24
|
# パレット数の変更
|
21
|
-
N_COLOR = len(palette)
|
25
|
+
N_COLOR = len(palette)-100 # 適当な数に減らす
|
22
26
|
palette = palette[:N_COLOR]
|
23
27
|
|
28
|
+
# パレットの更新
|
29
|
+
palette = palette.reshape(-1).tolist()
|
24
30
|
img.putpalette(palette)
|
25
31
|
|
26
|
-
|
27
32
|
# 実データの更新
|
28
33
|
data = list(img.getdata())
|
29
34
|
# この処理はやりたいことに従ってご自身で実装ください。
|
@@ -32,5 +37,6 @@
|
|
32
37
|
data[i] = N_COLOR-1 # とりあえず末尾の番号に振る?
|
33
38
|
|
34
39
|
img.putdata(data)
|
35
|
-
img.save('ret.
|
40
|
+
img.save('ret.png')
|
36
|
-
```
|
41
|
+
```
|
42
|
+

|