Preciso que uma cor específica seja a primeira no mapa de cores ao usar -kmeans
para reduzir a quantidade de cores em uma imagem. É necessário para texturas do Unreal Engine 1 ao definir uma cor de máscara.
Isso é tudo que tenho até agora:
magick "$PNG_FILE" -kmeans 255 "$PCX_FILE"
Eu consigo fazer isso de certa forma usando a -define kmeans:seed-colors="#ff00ff"
diretiva, mas ela piora muito o resultado, pois impede que as cores da semente sejam amostradas automaticamente.
Não pode ser feito com o ImageMagick , mas você pode fazer com o NetPBM suite. O truque é usar ppmtopcx com uma paleta forçada.
Aqui está um script que fará isso por você - ele é bem comentado e cria todos os arquivos intermediários em formatos fáceis de visualizar:
Criei uma imagem de teste que garante incluir magenta e outras 255 cores, como esta:
A paleta descartada no final fica assim:
Espero que você consiga ver magenta (ff00ff) como a primeira entrada e que ele esteja faltando como a entrada final (tendo sido realocado para o início).
Se você não gosta do NetPBM , você pode fazê-lo de forma muito simples em Python com Pillow da seguinte maneira:
Note que não codifiquei o caso geral , apenas a demonstração de troca de índices de paleta 0 e 255. O outro caso não é muito mais difícil e você certamente pode codificá-lo a partir deste exemplo. Não queria me atolar no caso geral porque Python pode não ser uma boa opção para você.