Usando o GraphicsMagick, é bastante fácil substituir uma cor pela transparência ...
gm convert -transparent magenta src.png dst.png
Infelizmente, não consigo descobrir uma maneira simples de fazer exatamente o oposto. Se eu tenho um arquivo de imagem com transparência de canal alfa, como eu o componho em um fundo de cor constante e descarte o canal alfa agora redundante? A cor do plano de fundo deve afetar os pixels que eram parcialmente transparentes e totalmente transparentes.
Eu localizei a opção + matte, mas ela literalmente descarta a camada alfa - normalmente deixando pixels de cores indesejadas onde a transparência estava, em vez de, por exemplo, usando a opção -background para especificar uma cor de fundo a ser usada.
A única maneira de gerenciar isso até agora é usar várias chamadas - uma para gerar um arquivo de imagem de retângulo de cor sólida, outra para compor a imagem original com a imagem de cor sólida e uma terceira para descartar o canal alfa . Isso parece loucura - certamente deveria ser possível com uma única chamada bem simples?
Atualmente, uso o GraphicsMagick, mas não há compromisso - mudarei para o ImageMagick se isso facilitar as coisas.
EDITAR
Quando eu digo "A cor do plano de fundo deve afetar os pixels que eram parcialmente transparentes e totalmente transparentes", quero dizer, o resultado deve ser visivelmente o que eu esperaria de um blite transparente em um fundo de cor sólida. Os pixels parcialmente transparentes devem ser misturados.
Isso significa que, se eu invertesse o processo - transformando a chave da cor de fundo em transparência -, esperaria ver um halo ao redor da imagem original, onde a cor de fundo é mesclada aos pixels, de modo que a cor não corresponde e, portanto, não é convertido novamente em transparência. Não é o que a maioria das pessoas desejaria por esse motivo. É o que eu quero, no entanto, já que não vou converter o plano de fundo de volta para a transparência - ainda terei a imagem original com a transparência original se eu precisar dela.