替换颜色图中的颜色 (python 3.7)
Replace colors in colormap (python 3.7)
我使用简单的线条将索引图像 256 色分解为调色板
import numpy as np
from PIL import Image
im = Image.open('')
palette = np.array(im.getpalette(),dtype=np.uint8).reshape((256,3))
#####################
Printed result
[[ 1 3 0]
[ 2 4 1]
[ 28 0 4]
[ 20 2 26]
[ 24 5 18]
[ 33 7 22]
[ 36 7 12]
[ 0 20 18]
[ 42 15 16]
[ 43 18 30]
...等等
打印 'palette' 将颜色列为 RGB 值,从索引 0 开始列出。索引 0 通常是深色或黑色。在某些引擎中,它用于 alpha,透明度。我想使用常用的透明度颜色,例如 Magenta 255 0 255
我想将我的每个 png 文件放在一个文件夹中并进行批处理(我将不得不手动将颜色添加到图像,然后将它们保存为 8 位,以便颜色成为调色板的一部分)然后执行:
- 将索引 0 颜色与颜色图中的洋红色交换位置
- 洋红色的位置因文件而异,只需找到颜色 255 0 25 并用它替换索引 0 处的颜色,但也将索引 0 颜色放在洋红色位置
- 使用单个 运行 对文件夹中的所有 .png 文件执行操作(将在 运行 脚本之前添加洋红色和索引图像)
我想你想要这样的东西:
#!/usr/bin/env python3
import numpy as np
from PIL import Image
# Open image
im = Image.open('image.png')
# Extract palette
palette = np.array(im.getpalette(),dtype=np.uint8).reshape((256,3))
# Look through palette
for index,entry in enumerate(palette):
# Swap this entry with entry 0 if this is magenta
if index>0 and np.all(entry==[255,0,255]):
print(f'DEBUG: Swapping entry {index} with entry 0')
palette[0], palette[index] = palette[index], palette[0]
break
else:
print('ERROR: Did not find magenta entry in palette')
# Replace palette with new one and save
im.putpalette(palette)
im.save('result.png')
您可能会将其编码为在命令行上接受多个文件,如下所示:
for file in sys.argv[1:]:
...
...
那么你可以运行:
UpdatePalette.py *.png
我使用简单的线条将索引图像 256 色分解为调色板
import numpy as np
from PIL import Image
im = Image.open('')
palette = np.array(im.getpalette(),dtype=np.uint8).reshape((256,3))
#####################
Printed result
[[ 1 3 0]
[ 2 4 1]
[ 28 0 4]
[ 20 2 26]
[ 24 5 18]
[ 33 7 22]
[ 36 7 12]
[ 0 20 18]
[ 42 15 16]
[ 43 18 30]
...等等
打印 'palette' 将颜色列为 RGB 值,从索引 0 开始列出。索引 0 通常是深色或黑色。在某些引擎中,它用于 alpha,透明度。我想使用常用的透明度颜色,例如 Magenta 255 0 255
我想将我的每个 png 文件放在一个文件夹中并进行批处理(我将不得不手动将颜色添加到图像,然后将它们保存为 8 位,以便颜色成为调色板的一部分)然后执行:
- 将索引 0 颜色与颜色图中的洋红色交换位置
- 洋红色的位置因文件而异,只需找到颜色 255 0 25 并用它替换索引 0 处的颜色,但也将索引 0 颜色放在洋红色位置
- 使用单个 运行 对文件夹中的所有 .png 文件执行操作(将在 运行 脚本之前添加洋红色和索引图像)
我想你想要这样的东西:
#!/usr/bin/env python3
import numpy as np
from PIL import Image
# Open image
im = Image.open('image.png')
# Extract palette
palette = np.array(im.getpalette(),dtype=np.uint8).reshape((256,3))
# Look through palette
for index,entry in enumerate(palette):
# Swap this entry with entry 0 if this is magenta
if index>0 and np.all(entry==[255,0,255]):
print(f'DEBUG: Swapping entry {index} with entry 0')
palette[0], palette[index] = palette[index], palette[0]
break
else:
print('ERROR: Did not find magenta entry in palette')
# Replace palette with new one and save
im.putpalette(palette)
im.save('result.png')
您可能会将其编码为在命令行上接受多个文件,如下所示:
for file in sys.argv[1:]:
...
...
那么你可以运行:
UpdatePalette.py *.png