Usando o GIMP, você pode "apagar" uma cor?

9

Atualmente, estou trabalhando em um aplicativo iOS e estou tentando fazer engenharia reversa na janela de diálogo de alerta padrão. Eu consegui descobrir qual é o valor alfa no plano de fundo que ele usa por meio de algumas amostras de cores em uma visão em preto sólido e em uma visão em branco sólido.

Dadas essas informações, usando o GIMP é possível "apagar" a cor do plano de fundo, para que eu fique apenas com o plano de fundo de alerta não misturado original?

Eu só tenho a visualização de alerta no formato de imagem como uma captura de tela de um aplicativo em execução.

Dan F
fonte

Respostas:

8

Sim é possivel. Deixe-me descrever como isso é feito, usando esta imagem do Wikimedia Commons (por ed_g2s , licenciada como CC-By-SA 3.0 ) como exemplo:

Imagem de demonstração de transparência PNG por ed_g2s, licenciada como CC-By-SA 3.0

  1. Abra as versões em segundo plano em preto e branco como camadas da mesma imagem (usando Abrir como camadas ... ou apenas abra as duas e copie e cole uma na outra). Mova a camada branca acima da camada preta, se ainda não estiver assim. As duas camadas devem se parecer com isso:

    Imagem de demonstração com fundo preto Imagem de demonstração com fundo branco

  2. Tome a diferença das camadas: clone a camada preta (você precisará dela mais tarde), altere o modo da camada da camada branca para "diferença" e faça a mesclagem. Inverta o resultado. Isso fornece o canal alfa da imagem original.

    Canal alfa reconstruído

    Editar: se seus planos de fundo não forem em preto e branco, a camada de diferença invertida não terá um plano de fundo preto. Para corrigir isso, primeiro desature a camada (usando o modo que forneça o melhor contraste) e use Cores → Automático → Normalizar para tornar o fundo preto. Você também pode usar o Channel Mixer , mas é um pouco mais difícil de usar.

    (A normalização acima funciona se o canal alfa que você está recriando tiver pelo menos algumas partes com 100% de opacidade; se a imagem que estiver recriando estiver translúcida em todos os lugares, você poderá usar Cores → Níveis ... para definir apenas o ponto preto. )

    Se você ainda não possui uma, também precisará criar uma versão da sua imagem com fundo preto para a próxima etapa. Para fazer isso, use as seguintes etapas extras:

    • Escolha a versão original com o fundo mais escuro. Crie uma nova camada sobre ela preenchida com a cor de fundo.
    • Clone a camada de diferença e inverta-a para que fique com um fundo branco. Coloque essa camada sobre a nova cor sólida que você acabou de criar, defina seu modo de camada para "multiplicar" e mescle-o.
    • Por fim, altere o modo da camada resultante para "subtrair" e mescle-o na camada com a imagem original. Isso deve subtrair o fundo original, deixando a imagem em um fundo preto.
  3. Se estivéssemos usando um formato de imagem com alfa pré-multiplicado, estaríamos mais ou menos concluídos agora. Mas como não somos, ainda precisamos desmultiplicar os canais RGB. Para fazer isso, clone a camada alfa que criamos na etapa anterior (ou copie-a para a área de transferência), defina seu modo de camada para "dividir" e junte-a à camada de fundo preto clonada antes da etapa 2. O resultado deve ficar assim (compare com a versão original em fundo preto para ver a diferença):

    Canais RGB desmultiplicados

  4. Agora, adicione uma máscara de camada à camada resultante, selecione a máscara e cole a camada alfa nela. O resultado agora deve parecer mais ou menos com a imagem transparente original. Finalmente, para transformar a máscara em um canal alfa adequado, você pode aplicá-la (mas a exportação PNG do GIMP fará isso por você, mesmo que não o faça). E pronto - um PNG transparente reconstruído pronto para uso:

    Imagem reconstruída com transparência

Claro, esta técnica realmente requer que você tenha versões da imagem em puros fundos brancos preto e puros. Se os fundos estiverem um pouco desanimados, métodos semelhantes ainda poderão ser utilizados, mas talvez você precise fazer ajustes de cores adicionais e os resultados podem não ser tão perfeitos. ( Editar: consulte as adições ao passo 2 acima. As instruções alteradas devem funcionar com fundos de qualquer cor, desde que sejam cores sólidas.)


Ps. O GIMP também possui um recurso "Apagamento de cores" (como um modo de mesclagem para a ferramenta Preenchimento de balde ou como Cor para alfa ... para toda a imagem), que é útil para reconstruir a transparência quando você tem apenas uma versão da imagem sobre um fundo de cor sólida. No entanto, a menos que seja usado com cuidado, ele tem uma tendência a produzir resultados bastante mais transparentes do que você provavelmente gostaria que fosse .

Pps. Se você comparar as imagens originais e reconstruídas com muito cuidado, verá que elas não são exatamente idênticas - alguns valores de cores são desativados em 1/256 ou mais. Isso ocorre porque o modo de camada "dividir" do GIMP funciona: em vez de calcular o verdadeiro inverso da multiplicação alfa, que seria a saída = (255 × entrada ) / camada , na verdade calcula a saída = (256 × entrada ) / ( camada+ 1) Essa incompatibilidade, que é feita ostensivamente para evitar dividir por zero, significa que algumas cores podem arredondar para um valor ligeiramente diferente do que deveriam. Infelizmente, não conheço nenhuma maneira de contornar isso, além de corrigir o GIMP, escrever um plug-in para fazer a divisão da maneira que queremos ou usar outro programa. Felizmente, porém, a diferença de cores raramente é percebida pelo olho humano.

Ilmari Karonen
fonte