我需要将特定颜色作为颜色图中的第一个颜色,以-kmeans
减少图像中的颜色数量。定义遮罩颜色时,虚幻引擎 1 纹理需要它。
这是我目前得到的全部信息:
magick "$PNG_FILE" -kmeans 255 "$PCX_FILE"
我可以在某种程度上使用-define kmeans:seed-colors="#ff00ff"
指令来实现这一点,但是它会使输出变得太糟糕,因为它会阻止种子颜色被自动采样。
我需要将特定颜色作为颜色图中的第一个颜色,以-kmeans
减少图像中的颜色数量。定义遮罩颜色时,虚幻引擎 1 纹理需要它。
这是我目前得到的全部信息:
magick "$PNG_FILE" -kmeans 255 "$PCX_FILE"
我可以在某种程度上使用-define kmeans:seed-colors="#ff00ff"
指令来实现这一点,但是它会使输出变得太糟糕,因为它会阻止种子颜色被自动采样。
使用ImageMagick无法做到这一点,但可以使用NetPBM套件做到这一点。诀窍是使用带有强制调色板的ppmtopcx 。
这里有一个脚本可以为您完成此操作 - 它带有详细的注释,并且以易于查看的格式创建所有中间文件:
我制作了一张测试图像,保证包含洋红色和其他 255 种颜色,如下所示:
最后转储的调色板如下所示:
希望您能看到洋红色 (ff00ff) 作为第一个条目,并且它缺少作为最后一个条目(已重新定位到开始处)。
如果你不喜欢NetPBM,你可以使用 Python 中的 Pillow 非常简单地完成此操作,如下所示:
注意,我没有编写一般情况的代码,只是演示了交换调色板索引 0 和 255 的过程。另一种情况并不难,你当然可以从这个例子中编写代码。我不想陷入一般情况的泥潭,因为 Python 可能不适合你。